diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + + @@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + + @@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java new file mode 100644 index 0000000..9251df5 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java @@ -0,0 +1,145 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.mapper.system.SystemLocationMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.service.system.ISystemPositionService; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemLocationServiceImpl extends ServiceImpl implements ISystemLocationService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + private final ISystemPositionService positionService; + + @Override + public void add(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setCreateUser(authService.getLoginUser().getId()); + systemLocation.setCreateTime(new Date()); + this.save(systemLocation); + } + + private void fillLocation(SystemLocation systemLocation) { + Long chooseDeptId = systemLocation.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemLocation.setSubSystemId(null); + systemLocation.setDeptId(chooseDeptId); + systemLocation.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemLocation.setSubSystemId(chooseDeptId); + systemLocation.setDeptId(chooseDept.getPid()); + systemLocation.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setUpdateUser(authService.getLoginUser().getId()); + systemLocation.setUpdateTime(new Date()); + this.updateById(systemLocation); + } + + @Override + public void delete(SystemLocation systemLocation) { + Long positionId = systemLocation.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(positionId)){ + queryWrapper.eq("position_id",positionId); + } + if(StrUtil.isNotEmpty(installLocation)){ + queryWrapper.like("install_location", installLocation); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemLocation systemLocation){ + systemLocation.setCompanyName(deptService.getDeptName(systemLocation.getCompanyId())); + systemLocation.setDeptName(deptService.getDeptName(systemLocation.getDeptId())); + systemLocation.setSubSystemName(deptService.getDeptName(systemLocation.getSubSystemId())); + systemLocation.setPositionName(positionService.getNameById(systemLocation.getPositionId())); + } +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java new file mode 100644 index 0000000..9251df5 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java @@ -0,0 +1,145 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.mapper.system.SystemLocationMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.service.system.ISystemPositionService; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemLocationServiceImpl extends ServiceImpl implements ISystemLocationService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + private final ISystemPositionService positionService; + + @Override + public void add(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setCreateUser(authService.getLoginUser().getId()); + systemLocation.setCreateTime(new Date()); + this.save(systemLocation); + } + + private void fillLocation(SystemLocation systemLocation) { + Long chooseDeptId = systemLocation.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemLocation.setSubSystemId(null); + systemLocation.setDeptId(chooseDeptId); + systemLocation.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemLocation.setSubSystemId(chooseDeptId); + systemLocation.setDeptId(chooseDept.getPid()); + systemLocation.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setUpdateUser(authService.getLoginUser().getId()); + systemLocation.setUpdateTime(new Date()); + this.updateById(systemLocation); + } + + @Override + public void delete(SystemLocation systemLocation) { + Long positionId = systemLocation.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(positionId)){ + queryWrapper.eq("position_id",positionId); + } + if(StrUtil.isNotEmpty(installLocation)){ + queryWrapper.like("install_location", installLocation); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemLocation systemLocation){ + systemLocation.setCompanyName(deptService.getDeptName(systemLocation.getCompanyId())); + systemLocation.setDeptName(deptService.getDeptName(systemLocation.getDeptId())); + systemLocation.setSubSystemName(deptService.getDeptName(systemLocation.getSubSystemId())); + systemLocation.setPositionName(positionService.getNameById(systemLocation.getPositionId())); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java index f197fa6..f68b96e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.service.impl.system; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; @@ -16,7 +18,9 @@ import com.casic.missiles.mapper.system.SystemNoticeUserRelationMapper; import com.casic.missiles.model.system.SystemNotice; import com.casic.missiles.model.system.SystemNoticeUserRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.IBoardMessageService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.service.system.ISystemNoticeService; import com.casic.missiles.service.system.ISystemNoticeUserRelationService; import com.casic.missiles.utils.ConvertUtils; @@ -48,12 +52,22 @@ @Autowired private IBoardMessageService boardMessageService; + @Autowired + private ISystemDeptService systemDeptService; + @Autowired + private AbstractDeptService deptService; + @Override public Page listPage(Page page, NoticeListRequest request) { AuthUser user = ShiroKit.getUser(); if(!Objects.isNull(user)){ request.setUserId(user.getId()); } + Dept company = systemDeptService.getUserCompany(); + request.setUserCompanyName(company.getFullName()); + List allDeptList = deptService.list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + request.setTopCompanyName(top.getFullName()); Page noticePage = noticeMapper.selectListPage(page, request); return noticePage; } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java new file mode 100644 index 0000000..9251df5 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java @@ -0,0 +1,145 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.mapper.system.SystemLocationMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.service.system.ISystemPositionService; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemLocationServiceImpl extends ServiceImpl implements ISystemLocationService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + private final ISystemPositionService positionService; + + @Override + public void add(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setCreateUser(authService.getLoginUser().getId()); + systemLocation.setCreateTime(new Date()); + this.save(systemLocation); + } + + private void fillLocation(SystemLocation systemLocation) { + Long chooseDeptId = systemLocation.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemLocation.setSubSystemId(null); + systemLocation.setDeptId(chooseDeptId); + systemLocation.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemLocation.setSubSystemId(chooseDeptId); + systemLocation.setDeptId(chooseDept.getPid()); + systemLocation.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setUpdateUser(authService.getLoginUser().getId()); + systemLocation.setUpdateTime(new Date()); + this.updateById(systemLocation); + } + + @Override + public void delete(SystemLocation systemLocation) { + Long positionId = systemLocation.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(positionId)){ + queryWrapper.eq("position_id",positionId); + } + if(StrUtil.isNotEmpty(installLocation)){ + queryWrapper.like("install_location", installLocation); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemLocation systemLocation){ + systemLocation.setCompanyName(deptService.getDeptName(systemLocation.getCompanyId())); + systemLocation.setDeptName(deptService.getDeptName(systemLocation.getDeptId())); + systemLocation.setSubSystemName(deptService.getDeptName(systemLocation.getSubSystemId())); + systemLocation.setPositionName(positionService.getNameById(systemLocation.getPositionId())); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java index f197fa6..f68b96e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.service.impl.system; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; @@ -16,7 +18,9 @@ import com.casic.missiles.mapper.system.SystemNoticeUserRelationMapper; import com.casic.missiles.model.system.SystemNotice; import com.casic.missiles.model.system.SystemNoticeUserRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.IBoardMessageService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.service.system.ISystemNoticeService; import com.casic.missiles.service.system.ISystemNoticeUserRelationService; import com.casic.missiles.utils.ConvertUtils; @@ -48,12 +52,22 @@ @Autowired private IBoardMessageService boardMessageService; + @Autowired + private ISystemDeptService systemDeptService; + @Autowired + private AbstractDeptService deptService; + @Override public Page listPage(Page page, NoticeListRequest request) { AuthUser user = ShiroKit.getUser(); if(!Objects.isNull(user)){ request.setUserId(user.getId()); } + Dept company = systemDeptService.getUserCompany(); + request.setUserCompanyName(company.getFullName()); + List allDeptList = deptService.list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + request.setTopCompanyName(top.getFullName()); Page noticePage = noticeMapper.selectListPage(page, request); return noticePage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java new file mode 100644 index 0000000..3b2e9f4 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java @@ -0,0 +1,149 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.mapper.system.SystemPositionMapper; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemPositionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-岗位管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemPositionServiceImpl extends ServiceImpl implements ISystemPositionService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + + @Override + public void add(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setCreateUser(authService.getLoginUser().getId()); + systemPosition.setCreateTime(new Date()); + this.save(systemPosition); + } + + private void fillPosition(SystemPosition systemPosition) { + Long chooseDeptId = systemPosition.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemPosition.setSubSystemId(null); + systemPosition.setDeptId(chooseDeptId); + systemPosition.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemPosition.setSubSystemId(chooseDeptId); + systemPosition.setDeptId(chooseDept.getPid()); + systemPosition.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setUpdateUser(authService.getLoginUser().getId()); + systemPosition.setUpdateTime(new Date()); + this.updateById(systemPosition); + } + + @Override + public void delete(SystemPosition systemPosition) { + Long positionId = systemPosition.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId, String positionName) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(StrUtil.isNotEmpty(positionName)){ + queryWrapper.like("position_name", positionName); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemPosition systemPosition){ + systemPosition.setCompanyName(deptService.getDeptName(systemPosition.getCompanyId())); + systemPosition.setDeptName(deptService.getDeptName(systemPosition.getDeptId())); + systemPosition.setSubSystemName(deptService.getDeptName(systemPosition.getSubSystemId())); + } + + @Override + public String getNameById(Long positionId) { + SystemPosition position = this.getById(positionId); + if(ObjectUtil.isNotEmpty(position)){ + return position.getPositionName(); + } + return null; + } +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java new file mode 100644 index 0000000..9251df5 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java @@ -0,0 +1,145 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.mapper.system.SystemLocationMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.service.system.ISystemPositionService; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemLocationServiceImpl extends ServiceImpl implements ISystemLocationService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + private final ISystemPositionService positionService; + + @Override + public void add(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setCreateUser(authService.getLoginUser().getId()); + systemLocation.setCreateTime(new Date()); + this.save(systemLocation); + } + + private void fillLocation(SystemLocation systemLocation) { + Long chooseDeptId = systemLocation.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemLocation.setSubSystemId(null); + systemLocation.setDeptId(chooseDeptId); + systemLocation.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemLocation.setSubSystemId(chooseDeptId); + systemLocation.setDeptId(chooseDept.getPid()); + systemLocation.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setUpdateUser(authService.getLoginUser().getId()); + systemLocation.setUpdateTime(new Date()); + this.updateById(systemLocation); + } + + @Override + public void delete(SystemLocation systemLocation) { + Long positionId = systemLocation.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(positionId)){ + queryWrapper.eq("position_id",positionId); + } + if(StrUtil.isNotEmpty(installLocation)){ + queryWrapper.like("install_location", installLocation); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemLocation systemLocation){ + systemLocation.setCompanyName(deptService.getDeptName(systemLocation.getCompanyId())); + systemLocation.setDeptName(deptService.getDeptName(systemLocation.getDeptId())); + systemLocation.setSubSystemName(deptService.getDeptName(systemLocation.getSubSystemId())); + systemLocation.setPositionName(positionService.getNameById(systemLocation.getPositionId())); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java index f197fa6..f68b96e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.service.impl.system; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; @@ -16,7 +18,9 @@ import com.casic.missiles.mapper.system.SystemNoticeUserRelationMapper; import com.casic.missiles.model.system.SystemNotice; import com.casic.missiles.model.system.SystemNoticeUserRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.IBoardMessageService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.service.system.ISystemNoticeService; import com.casic.missiles.service.system.ISystemNoticeUserRelationService; import com.casic.missiles.utils.ConvertUtils; @@ -48,12 +52,22 @@ @Autowired private IBoardMessageService boardMessageService; + @Autowired + private ISystemDeptService systemDeptService; + @Autowired + private AbstractDeptService deptService; + @Override public Page listPage(Page page, NoticeListRequest request) { AuthUser user = ShiroKit.getUser(); if(!Objects.isNull(user)){ request.setUserId(user.getId()); } + Dept company = systemDeptService.getUserCompany(); + request.setUserCompanyName(company.getFullName()); + List allDeptList = deptService.list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + request.setTopCompanyName(top.getFullName()); Page noticePage = noticeMapper.selectListPage(page, request); return noticePage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java new file mode 100644 index 0000000..3b2e9f4 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java @@ -0,0 +1,149 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.mapper.system.SystemPositionMapper; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemPositionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-岗位管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemPositionServiceImpl extends ServiceImpl implements ISystemPositionService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + + @Override + public void add(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setCreateUser(authService.getLoginUser().getId()); + systemPosition.setCreateTime(new Date()); + this.save(systemPosition); + } + + private void fillPosition(SystemPosition systemPosition) { + Long chooseDeptId = systemPosition.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemPosition.setSubSystemId(null); + systemPosition.setDeptId(chooseDeptId); + systemPosition.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemPosition.setSubSystemId(chooseDeptId); + systemPosition.setDeptId(chooseDept.getPid()); + systemPosition.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setUpdateUser(authService.getLoginUser().getId()); + systemPosition.setUpdateTime(new Date()); + this.updateById(systemPosition); + } + + @Override + public void delete(SystemPosition systemPosition) { + Long positionId = systemPosition.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId, String positionName) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(StrUtil.isNotEmpty(positionName)){ + queryWrapper.like("position_name", positionName); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemPosition systemPosition){ + systemPosition.setCompanyName(deptService.getDeptName(systemPosition.getCompanyId())); + systemPosition.setDeptName(deptService.getDeptName(systemPosition.getDeptId())); + systemPosition.setSubSystemName(deptService.getDeptName(systemPosition.getSubSystemId())); + } + + @Override + public String getNameById(Long positionId) { + SystemPosition position = this.getById(positionId); + if(ObjectUtil.isNotEmpty(position)){ + return position.getPositionName(); + } + return null; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java index 5c841ed..dac2ff7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.impl.system; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -80,9 +81,13 @@ private void wrapper(SystemSign systemSign){ User user = userMapper.selectById(systemSign.getSignUserId()); - systemSign.setSignDeptId(user.getDeptId()); - Dept dept = deptMapper.selectById(user.getDeptId()); - systemSign.setSignDeptName(dept.getFullName()); + if(ObjectUtil.isNotEmpty(user)){ + systemSign.setSignDeptId(user.getDeptId()); + Dept dept = deptMapper.selectById(user.getDeptId()); + if(ObjectUtil.isNotEmpty(dept)){ + systemSign.setSignDeptName(dept.getFullName()); + } + } } @Override diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java new file mode 100644 index 0000000..9251df5 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java @@ -0,0 +1,145 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.mapper.system.SystemLocationMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.service.system.ISystemPositionService; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemLocationServiceImpl extends ServiceImpl implements ISystemLocationService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + private final ISystemPositionService positionService; + + @Override + public void add(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setCreateUser(authService.getLoginUser().getId()); + systemLocation.setCreateTime(new Date()); + this.save(systemLocation); + } + + private void fillLocation(SystemLocation systemLocation) { + Long chooseDeptId = systemLocation.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemLocation.setSubSystemId(null); + systemLocation.setDeptId(chooseDeptId); + systemLocation.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemLocation.setSubSystemId(chooseDeptId); + systemLocation.setDeptId(chooseDept.getPid()); + systemLocation.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setUpdateUser(authService.getLoginUser().getId()); + systemLocation.setUpdateTime(new Date()); + this.updateById(systemLocation); + } + + @Override + public void delete(SystemLocation systemLocation) { + Long positionId = systemLocation.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(positionId)){ + queryWrapper.eq("position_id",positionId); + } + if(StrUtil.isNotEmpty(installLocation)){ + queryWrapper.like("install_location", installLocation); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemLocation systemLocation){ + systemLocation.setCompanyName(deptService.getDeptName(systemLocation.getCompanyId())); + systemLocation.setDeptName(deptService.getDeptName(systemLocation.getDeptId())); + systemLocation.setSubSystemName(deptService.getDeptName(systemLocation.getSubSystemId())); + systemLocation.setPositionName(positionService.getNameById(systemLocation.getPositionId())); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java index f197fa6..f68b96e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.service.impl.system; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; @@ -16,7 +18,9 @@ import com.casic.missiles.mapper.system.SystemNoticeUserRelationMapper; import com.casic.missiles.model.system.SystemNotice; import com.casic.missiles.model.system.SystemNoticeUserRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.IBoardMessageService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.service.system.ISystemNoticeService; import com.casic.missiles.service.system.ISystemNoticeUserRelationService; import com.casic.missiles.utils.ConvertUtils; @@ -48,12 +52,22 @@ @Autowired private IBoardMessageService boardMessageService; + @Autowired + private ISystemDeptService systemDeptService; + @Autowired + private AbstractDeptService deptService; + @Override public Page listPage(Page page, NoticeListRequest request) { AuthUser user = ShiroKit.getUser(); if(!Objects.isNull(user)){ request.setUserId(user.getId()); } + Dept company = systemDeptService.getUserCompany(); + request.setUserCompanyName(company.getFullName()); + List allDeptList = deptService.list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + request.setTopCompanyName(top.getFullName()); Page noticePage = noticeMapper.selectListPage(page, request); return noticePage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java new file mode 100644 index 0000000..3b2e9f4 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java @@ -0,0 +1,149 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.mapper.system.SystemPositionMapper; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemPositionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-岗位管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemPositionServiceImpl extends ServiceImpl implements ISystemPositionService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + + @Override + public void add(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setCreateUser(authService.getLoginUser().getId()); + systemPosition.setCreateTime(new Date()); + this.save(systemPosition); + } + + private void fillPosition(SystemPosition systemPosition) { + Long chooseDeptId = systemPosition.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemPosition.setSubSystemId(null); + systemPosition.setDeptId(chooseDeptId); + systemPosition.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemPosition.setSubSystemId(chooseDeptId); + systemPosition.setDeptId(chooseDept.getPid()); + systemPosition.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setUpdateUser(authService.getLoginUser().getId()); + systemPosition.setUpdateTime(new Date()); + this.updateById(systemPosition); + } + + @Override + public void delete(SystemPosition systemPosition) { + Long positionId = systemPosition.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId, String positionName) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(StrUtil.isNotEmpty(positionName)){ + queryWrapper.like("position_name", positionName); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemPosition systemPosition){ + systemPosition.setCompanyName(deptService.getDeptName(systemPosition.getCompanyId())); + systemPosition.setDeptName(deptService.getDeptName(systemPosition.getDeptId())); + systemPosition.setSubSystemName(deptService.getDeptName(systemPosition.getSubSystemId())); + } + + @Override + public String getNameById(Long positionId) { + SystemPosition position = this.getById(positionId); + if(ObjectUtil.isNotEmpty(position)){ + return position.getPositionName(); + } + return null; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java index 5c841ed..dac2ff7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.impl.system; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -80,9 +81,13 @@ private void wrapper(SystemSign systemSign){ User user = userMapper.selectById(systemSign.getSignUserId()); - systemSign.setSignDeptId(user.getDeptId()); - Dept dept = deptMapper.selectById(user.getDeptId()); - systemSign.setSignDeptName(dept.getFullName()); + if(ObjectUtil.isNotEmpty(user)){ + systemSign.setSignDeptId(user.getDeptId()); + Dept dept = deptMapper.selectById(user.getDeptId()); + if(ObjectUtil.isNotEmpty(dept)){ + systemSign.setSignDeptName(dept.getFullName()); + } + } } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java index b5a8a56..abbd428 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java @@ -21,4 +21,6 @@ InspectionApprovalForm detail(Long inspectionId); + String checkApproval(InspectionApprovalForm approvalForm); + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java new file mode 100644 index 0000000..9251df5 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java @@ -0,0 +1,145 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.mapper.system.SystemLocationMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.service.system.ISystemPositionService; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemLocationServiceImpl extends ServiceImpl implements ISystemLocationService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + private final ISystemPositionService positionService; + + @Override + public void add(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setCreateUser(authService.getLoginUser().getId()); + systemLocation.setCreateTime(new Date()); + this.save(systemLocation); + } + + private void fillLocation(SystemLocation systemLocation) { + Long chooseDeptId = systemLocation.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemLocation.setSubSystemId(null); + systemLocation.setDeptId(chooseDeptId); + systemLocation.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemLocation.setSubSystemId(chooseDeptId); + systemLocation.setDeptId(chooseDept.getPid()); + systemLocation.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setUpdateUser(authService.getLoginUser().getId()); + systemLocation.setUpdateTime(new Date()); + this.updateById(systemLocation); + } + + @Override + public void delete(SystemLocation systemLocation) { + Long positionId = systemLocation.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(positionId)){ + queryWrapper.eq("position_id",positionId); + } + if(StrUtil.isNotEmpty(installLocation)){ + queryWrapper.like("install_location", installLocation); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemLocation systemLocation){ + systemLocation.setCompanyName(deptService.getDeptName(systemLocation.getCompanyId())); + systemLocation.setDeptName(deptService.getDeptName(systemLocation.getDeptId())); + systemLocation.setSubSystemName(deptService.getDeptName(systemLocation.getSubSystemId())); + systemLocation.setPositionName(positionService.getNameById(systemLocation.getPositionId())); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java index f197fa6..f68b96e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.service.impl.system; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; @@ -16,7 +18,9 @@ import com.casic.missiles.mapper.system.SystemNoticeUserRelationMapper; import com.casic.missiles.model.system.SystemNotice; import com.casic.missiles.model.system.SystemNoticeUserRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.IBoardMessageService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.service.system.ISystemNoticeService; import com.casic.missiles.service.system.ISystemNoticeUserRelationService; import com.casic.missiles.utils.ConvertUtils; @@ -48,12 +52,22 @@ @Autowired private IBoardMessageService boardMessageService; + @Autowired + private ISystemDeptService systemDeptService; + @Autowired + private AbstractDeptService deptService; + @Override public Page listPage(Page page, NoticeListRequest request) { AuthUser user = ShiroKit.getUser(); if(!Objects.isNull(user)){ request.setUserId(user.getId()); } + Dept company = systemDeptService.getUserCompany(); + request.setUserCompanyName(company.getFullName()); + List allDeptList = deptService.list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + request.setTopCompanyName(top.getFullName()); Page noticePage = noticeMapper.selectListPage(page, request); return noticePage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java new file mode 100644 index 0000000..3b2e9f4 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java @@ -0,0 +1,149 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.mapper.system.SystemPositionMapper; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemPositionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-岗位管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemPositionServiceImpl extends ServiceImpl implements ISystemPositionService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + + @Override + public void add(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setCreateUser(authService.getLoginUser().getId()); + systemPosition.setCreateTime(new Date()); + this.save(systemPosition); + } + + private void fillPosition(SystemPosition systemPosition) { + Long chooseDeptId = systemPosition.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemPosition.setSubSystemId(null); + systemPosition.setDeptId(chooseDeptId); + systemPosition.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemPosition.setSubSystemId(chooseDeptId); + systemPosition.setDeptId(chooseDept.getPid()); + systemPosition.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setUpdateUser(authService.getLoginUser().getId()); + systemPosition.setUpdateTime(new Date()); + this.updateById(systemPosition); + } + + @Override + public void delete(SystemPosition systemPosition) { + Long positionId = systemPosition.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId, String positionName) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(StrUtil.isNotEmpty(positionName)){ + queryWrapper.like("position_name", positionName); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemPosition systemPosition){ + systemPosition.setCompanyName(deptService.getDeptName(systemPosition.getCompanyId())); + systemPosition.setDeptName(deptService.getDeptName(systemPosition.getDeptId())); + systemPosition.setSubSystemName(deptService.getDeptName(systemPosition.getSubSystemId())); + } + + @Override + public String getNameById(Long positionId) { + SystemPosition position = this.getById(positionId); + if(ObjectUtil.isNotEmpty(position)){ + return position.getPositionName(); + } + return null; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java index 5c841ed..dac2ff7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.impl.system; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -80,9 +81,13 @@ private void wrapper(SystemSign systemSign){ User user = userMapper.selectById(systemSign.getSignUserId()); - systemSign.setSignDeptId(user.getDeptId()); - Dept dept = deptMapper.selectById(user.getDeptId()); - systemSign.setSignDeptName(dept.getFullName()); + if(ObjectUtil.isNotEmpty(user)){ + systemSign.setSignDeptId(user.getDeptId()); + Dept dept = deptMapper.selectById(user.getDeptId()); + if(ObjectUtil.isNotEmpty(dept)){ + systemSign.setSignDeptName(dept.getFullName()); + } + } } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java index b5a8a56..abbd428 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java @@ -21,4 +21,6 @@ InspectionApprovalForm detail(Long inspectionId); + String checkApproval(InspectionApprovalForm approvalForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java index 791794d..a96dfec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java @@ -30,5 +30,5 @@ Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm); EquipmentStatusApproval approvalInfoDetail(Long approvalId); - + void updateStatusAndSaveLog(EquipmentStatusApproval approval); } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java new file mode 100644 index 0000000..9251df5 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java @@ -0,0 +1,145 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.mapper.system.SystemLocationMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.service.system.ISystemPositionService; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemLocationServiceImpl extends ServiceImpl implements ISystemLocationService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + private final ISystemPositionService positionService; + + @Override + public void add(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setCreateUser(authService.getLoginUser().getId()); + systemLocation.setCreateTime(new Date()); + this.save(systemLocation); + } + + private void fillLocation(SystemLocation systemLocation) { + Long chooseDeptId = systemLocation.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemLocation.setSubSystemId(null); + systemLocation.setDeptId(chooseDeptId); + systemLocation.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemLocation.setSubSystemId(chooseDeptId); + systemLocation.setDeptId(chooseDept.getPid()); + systemLocation.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setUpdateUser(authService.getLoginUser().getId()); + systemLocation.setUpdateTime(new Date()); + this.updateById(systemLocation); + } + + @Override + public void delete(SystemLocation systemLocation) { + Long positionId = systemLocation.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(positionId)){ + queryWrapper.eq("position_id",positionId); + } + if(StrUtil.isNotEmpty(installLocation)){ + queryWrapper.like("install_location", installLocation); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemLocation systemLocation){ + systemLocation.setCompanyName(deptService.getDeptName(systemLocation.getCompanyId())); + systemLocation.setDeptName(deptService.getDeptName(systemLocation.getDeptId())); + systemLocation.setSubSystemName(deptService.getDeptName(systemLocation.getSubSystemId())); + systemLocation.setPositionName(positionService.getNameById(systemLocation.getPositionId())); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java index f197fa6..f68b96e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.service.impl.system; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; @@ -16,7 +18,9 @@ import com.casic.missiles.mapper.system.SystemNoticeUserRelationMapper; import com.casic.missiles.model.system.SystemNotice; import com.casic.missiles.model.system.SystemNoticeUserRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.IBoardMessageService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.service.system.ISystemNoticeService; import com.casic.missiles.service.system.ISystemNoticeUserRelationService; import com.casic.missiles.utils.ConvertUtils; @@ -48,12 +52,22 @@ @Autowired private IBoardMessageService boardMessageService; + @Autowired + private ISystemDeptService systemDeptService; + @Autowired + private AbstractDeptService deptService; + @Override public Page listPage(Page page, NoticeListRequest request) { AuthUser user = ShiroKit.getUser(); if(!Objects.isNull(user)){ request.setUserId(user.getId()); } + Dept company = systemDeptService.getUserCompany(); + request.setUserCompanyName(company.getFullName()); + List allDeptList = deptService.list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + request.setTopCompanyName(top.getFullName()); Page noticePage = noticeMapper.selectListPage(page, request); return noticePage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java new file mode 100644 index 0000000..3b2e9f4 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java @@ -0,0 +1,149 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.mapper.system.SystemPositionMapper; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemPositionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-岗位管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemPositionServiceImpl extends ServiceImpl implements ISystemPositionService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + + @Override + public void add(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setCreateUser(authService.getLoginUser().getId()); + systemPosition.setCreateTime(new Date()); + this.save(systemPosition); + } + + private void fillPosition(SystemPosition systemPosition) { + Long chooseDeptId = systemPosition.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemPosition.setSubSystemId(null); + systemPosition.setDeptId(chooseDeptId); + systemPosition.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemPosition.setSubSystemId(chooseDeptId); + systemPosition.setDeptId(chooseDept.getPid()); + systemPosition.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setUpdateUser(authService.getLoginUser().getId()); + systemPosition.setUpdateTime(new Date()); + this.updateById(systemPosition); + } + + @Override + public void delete(SystemPosition systemPosition) { + Long positionId = systemPosition.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId, String positionName) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(StrUtil.isNotEmpty(positionName)){ + queryWrapper.like("position_name", positionName); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemPosition systemPosition){ + systemPosition.setCompanyName(deptService.getDeptName(systemPosition.getCompanyId())); + systemPosition.setDeptName(deptService.getDeptName(systemPosition.getDeptId())); + systemPosition.setSubSystemName(deptService.getDeptName(systemPosition.getSubSystemId())); + } + + @Override + public String getNameById(Long positionId) { + SystemPosition position = this.getById(positionId); + if(ObjectUtil.isNotEmpty(position)){ + return position.getPositionName(); + } + return null; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java index 5c841ed..dac2ff7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.impl.system; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -80,9 +81,13 @@ private void wrapper(SystemSign systemSign){ User user = userMapper.selectById(systemSign.getSignUserId()); - systemSign.setSignDeptId(user.getDeptId()); - Dept dept = deptMapper.selectById(user.getDeptId()); - systemSign.setSignDeptName(dept.getFullName()); + if(ObjectUtil.isNotEmpty(user)){ + systemSign.setSignDeptId(user.getDeptId()); + Dept dept = deptMapper.selectById(user.getDeptId()); + if(ObjectUtil.isNotEmpty(dept)){ + systemSign.setSignDeptName(dept.getFullName()); + } + } } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java index b5a8a56..abbd428 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java @@ -21,4 +21,6 @@ InspectionApprovalForm detail(Long inspectionId); + String checkApproval(InspectionApprovalForm approvalForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java index 791794d..a96dfec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java @@ -30,5 +30,5 @@ Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm); EquipmentStatusApproval approvalInfoDetail(Long approvalId); - + void updateStatusAndSaveLog(EquipmentStatusApproval approval); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java index f4134d0..a87ead5 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java @@ -20,7 +20,5 @@ void saveLog(Long equipmentId,String statusType,String reason); - void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName); - List listByEquipment(Long equipmentId); } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java new file mode 100644 index 0000000..9251df5 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java @@ -0,0 +1,145 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.mapper.system.SystemLocationMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.service.system.ISystemPositionService; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemLocationServiceImpl extends ServiceImpl implements ISystemLocationService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + private final ISystemPositionService positionService; + + @Override + public void add(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setCreateUser(authService.getLoginUser().getId()); + systemLocation.setCreateTime(new Date()); + this.save(systemLocation); + } + + private void fillLocation(SystemLocation systemLocation) { + Long chooseDeptId = systemLocation.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemLocation.setSubSystemId(null); + systemLocation.setDeptId(chooseDeptId); + systemLocation.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemLocation.setSubSystemId(chooseDeptId); + systemLocation.setDeptId(chooseDept.getPid()); + systemLocation.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setUpdateUser(authService.getLoginUser().getId()); + systemLocation.setUpdateTime(new Date()); + this.updateById(systemLocation); + } + + @Override + public void delete(SystemLocation systemLocation) { + Long positionId = systemLocation.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(positionId)){ + queryWrapper.eq("position_id",positionId); + } + if(StrUtil.isNotEmpty(installLocation)){ + queryWrapper.like("install_location", installLocation); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemLocation systemLocation){ + systemLocation.setCompanyName(deptService.getDeptName(systemLocation.getCompanyId())); + systemLocation.setDeptName(deptService.getDeptName(systemLocation.getDeptId())); + systemLocation.setSubSystemName(deptService.getDeptName(systemLocation.getSubSystemId())); + systemLocation.setPositionName(positionService.getNameById(systemLocation.getPositionId())); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java index f197fa6..f68b96e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.service.impl.system; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; @@ -16,7 +18,9 @@ import com.casic.missiles.mapper.system.SystemNoticeUserRelationMapper; import com.casic.missiles.model.system.SystemNotice; import com.casic.missiles.model.system.SystemNoticeUserRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.IBoardMessageService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.service.system.ISystemNoticeService; import com.casic.missiles.service.system.ISystemNoticeUserRelationService; import com.casic.missiles.utils.ConvertUtils; @@ -48,12 +52,22 @@ @Autowired private IBoardMessageService boardMessageService; + @Autowired + private ISystemDeptService systemDeptService; + @Autowired + private AbstractDeptService deptService; + @Override public Page listPage(Page page, NoticeListRequest request) { AuthUser user = ShiroKit.getUser(); if(!Objects.isNull(user)){ request.setUserId(user.getId()); } + Dept company = systemDeptService.getUserCompany(); + request.setUserCompanyName(company.getFullName()); + List allDeptList = deptService.list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + request.setTopCompanyName(top.getFullName()); Page noticePage = noticeMapper.selectListPage(page, request); return noticePage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java new file mode 100644 index 0000000..3b2e9f4 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java @@ -0,0 +1,149 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.mapper.system.SystemPositionMapper; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemPositionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-岗位管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemPositionServiceImpl extends ServiceImpl implements ISystemPositionService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + + @Override + public void add(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setCreateUser(authService.getLoginUser().getId()); + systemPosition.setCreateTime(new Date()); + this.save(systemPosition); + } + + private void fillPosition(SystemPosition systemPosition) { + Long chooseDeptId = systemPosition.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemPosition.setSubSystemId(null); + systemPosition.setDeptId(chooseDeptId); + systemPosition.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemPosition.setSubSystemId(chooseDeptId); + systemPosition.setDeptId(chooseDept.getPid()); + systemPosition.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setUpdateUser(authService.getLoginUser().getId()); + systemPosition.setUpdateTime(new Date()); + this.updateById(systemPosition); + } + + @Override + public void delete(SystemPosition systemPosition) { + Long positionId = systemPosition.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId, String positionName) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(StrUtil.isNotEmpty(positionName)){ + queryWrapper.like("position_name", positionName); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemPosition systemPosition){ + systemPosition.setCompanyName(deptService.getDeptName(systemPosition.getCompanyId())); + systemPosition.setDeptName(deptService.getDeptName(systemPosition.getDeptId())); + systemPosition.setSubSystemName(deptService.getDeptName(systemPosition.getSubSystemId())); + } + + @Override + public String getNameById(Long positionId) { + SystemPosition position = this.getById(positionId); + if(ObjectUtil.isNotEmpty(position)){ + return position.getPositionName(); + } + return null; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java index 5c841ed..dac2ff7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.impl.system; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -80,9 +81,13 @@ private void wrapper(SystemSign systemSign){ User user = userMapper.selectById(systemSign.getSignUserId()); - systemSign.setSignDeptId(user.getDeptId()); - Dept dept = deptMapper.selectById(user.getDeptId()); - systemSign.setSignDeptName(dept.getFullName()); + if(ObjectUtil.isNotEmpty(user)){ + systemSign.setSignDeptId(user.getDeptId()); + Dept dept = deptMapper.selectById(user.getDeptId()); + if(ObjectUtil.isNotEmpty(dept)){ + systemSign.setSignDeptName(dept.getFullName()); + } + } } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java index b5a8a56..abbd428 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java @@ -21,4 +21,6 @@ InspectionApprovalForm detail(Long inspectionId); + String checkApproval(InspectionApprovalForm approvalForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java index 791794d..a96dfec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java @@ -30,5 +30,5 @@ Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm); EquipmentStatusApproval approvalInfoDetail(Long approvalId); - + void updateStatusAndSaveLog(EquipmentStatusApproval approval); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java index f4134d0..a87ead5 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java @@ -20,7 +20,5 @@ void saveLog(Long equipmentId,String statusType,String reason); - void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName); - List listByEquipment(Long equipmentId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java index a821d17..6db70cd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java @@ -1,12 +1,44 @@ package com.casic.missiles.service.system; +import com.casic.missiles.core.node.ZTreeNode; import com.casic.missiles.modular.system.model.Dept; + import java.util.List; public interface ISystemDeptService { + /** + * 获取用户所在单位(受检单位级别) + * @return 所在单位(顶级用户返回顶级) + */ Dept getUserCompany(); + /** + * 获取用户所属部门(连级) + * @param companyId 单位id + * @return 受检单位用户返回单位下的所有连,连级/分系统级 返回所在连 + */ + List getUserDeptList(Long companyId); + + /** + * 返回所有受检单位 + * @return 受检单位列表 + */ List getAllCompanyList(); + + /** + * 判断单位是否是受检单位 + * @param deptId 单位id + * @return deptId是受检单位,返回true + */ + boolean isCompany(Long deptId); + + /** + * 根据pid返回下级部门 + * @param pid 父级单位id + * @return 所有下级部门 + */ + List treeByDept(String pid); + } diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java new file mode 100644 index 0000000..9251df5 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java @@ -0,0 +1,145 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.mapper.system.SystemLocationMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.service.system.ISystemPositionService; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemLocationServiceImpl extends ServiceImpl implements ISystemLocationService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + private final ISystemPositionService positionService; + + @Override + public void add(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setCreateUser(authService.getLoginUser().getId()); + systemLocation.setCreateTime(new Date()); + this.save(systemLocation); + } + + private void fillLocation(SystemLocation systemLocation) { + Long chooseDeptId = systemLocation.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemLocation.setSubSystemId(null); + systemLocation.setDeptId(chooseDeptId); + systemLocation.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemLocation.setSubSystemId(chooseDeptId); + systemLocation.setDeptId(chooseDept.getPid()); + systemLocation.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setUpdateUser(authService.getLoginUser().getId()); + systemLocation.setUpdateTime(new Date()); + this.updateById(systemLocation); + } + + @Override + public void delete(SystemLocation systemLocation) { + Long positionId = systemLocation.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(positionId)){ + queryWrapper.eq("position_id",positionId); + } + if(StrUtil.isNotEmpty(installLocation)){ + queryWrapper.like("install_location", installLocation); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemLocation systemLocation){ + systemLocation.setCompanyName(deptService.getDeptName(systemLocation.getCompanyId())); + systemLocation.setDeptName(deptService.getDeptName(systemLocation.getDeptId())); + systemLocation.setSubSystemName(deptService.getDeptName(systemLocation.getSubSystemId())); + systemLocation.setPositionName(positionService.getNameById(systemLocation.getPositionId())); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java index f197fa6..f68b96e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.service.impl.system; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; @@ -16,7 +18,9 @@ import com.casic.missiles.mapper.system.SystemNoticeUserRelationMapper; import com.casic.missiles.model.system.SystemNotice; import com.casic.missiles.model.system.SystemNoticeUserRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.IBoardMessageService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.service.system.ISystemNoticeService; import com.casic.missiles.service.system.ISystemNoticeUserRelationService; import com.casic.missiles.utils.ConvertUtils; @@ -48,12 +52,22 @@ @Autowired private IBoardMessageService boardMessageService; + @Autowired + private ISystemDeptService systemDeptService; + @Autowired + private AbstractDeptService deptService; + @Override public Page listPage(Page page, NoticeListRequest request) { AuthUser user = ShiroKit.getUser(); if(!Objects.isNull(user)){ request.setUserId(user.getId()); } + Dept company = systemDeptService.getUserCompany(); + request.setUserCompanyName(company.getFullName()); + List allDeptList = deptService.list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + request.setTopCompanyName(top.getFullName()); Page noticePage = noticeMapper.selectListPage(page, request); return noticePage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java new file mode 100644 index 0000000..3b2e9f4 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java @@ -0,0 +1,149 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.mapper.system.SystemPositionMapper; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemPositionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-岗位管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemPositionServiceImpl extends ServiceImpl implements ISystemPositionService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + + @Override + public void add(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setCreateUser(authService.getLoginUser().getId()); + systemPosition.setCreateTime(new Date()); + this.save(systemPosition); + } + + private void fillPosition(SystemPosition systemPosition) { + Long chooseDeptId = systemPosition.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemPosition.setSubSystemId(null); + systemPosition.setDeptId(chooseDeptId); + systemPosition.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemPosition.setSubSystemId(chooseDeptId); + systemPosition.setDeptId(chooseDept.getPid()); + systemPosition.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setUpdateUser(authService.getLoginUser().getId()); + systemPosition.setUpdateTime(new Date()); + this.updateById(systemPosition); + } + + @Override + public void delete(SystemPosition systemPosition) { + Long positionId = systemPosition.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId, String positionName) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(StrUtil.isNotEmpty(positionName)){ + queryWrapper.like("position_name", positionName); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemPosition systemPosition){ + systemPosition.setCompanyName(deptService.getDeptName(systemPosition.getCompanyId())); + systemPosition.setDeptName(deptService.getDeptName(systemPosition.getDeptId())); + systemPosition.setSubSystemName(deptService.getDeptName(systemPosition.getSubSystemId())); + } + + @Override + public String getNameById(Long positionId) { + SystemPosition position = this.getById(positionId); + if(ObjectUtil.isNotEmpty(position)){ + return position.getPositionName(); + } + return null; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java index 5c841ed..dac2ff7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.impl.system; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -80,9 +81,13 @@ private void wrapper(SystemSign systemSign){ User user = userMapper.selectById(systemSign.getSignUserId()); - systemSign.setSignDeptId(user.getDeptId()); - Dept dept = deptMapper.selectById(user.getDeptId()); - systemSign.setSignDeptName(dept.getFullName()); + if(ObjectUtil.isNotEmpty(user)){ + systemSign.setSignDeptId(user.getDeptId()); + Dept dept = deptMapper.selectById(user.getDeptId()); + if(ObjectUtil.isNotEmpty(dept)){ + systemSign.setSignDeptName(dept.getFullName()); + } + } } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java index b5a8a56..abbd428 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java @@ -21,4 +21,6 @@ InspectionApprovalForm detail(Long inspectionId); + String checkApproval(InspectionApprovalForm approvalForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java index 791794d..a96dfec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java @@ -30,5 +30,5 @@ Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm); EquipmentStatusApproval approvalInfoDetail(Long approvalId); - + void updateStatusAndSaveLog(EquipmentStatusApproval approval); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java index f4134d0..a87ead5 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java @@ -20,7 +20,5 @@ void saveLog(Long equipmentId,String statusType,String reason); - void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName); - List listByEquipment(Long equipmentId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java index a821d17..6db70cd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java @@ -1,12 +1,44 @@ package com.casic.missiles.service.system; +import com.casic.missiles.core.node.ZTreeNode; import com.casic.missiles.modular.system.model.Dept; + import java.util.List; public interface ISystemDeptService { + /** + * 获取用户所在单位(受检单位级别) + * @return 所在单位(顶级用户返回顶级) + */ Dept getUserCompany(); + /** + * 获取用户所属部门(连级) + * @param companyId 单位id + * @return 受检单位用户返回单位下的所有连,连级/分系统级 返回所在连 + */ + List getUserDeptList(Long companyId); + + /** + * 返回所有受检单位 + * @return 受检单位列表 + */ List getAllCompanyList(); + + /** + * 判断单位是否是受检单位 + * @param deptId 单位id + * @return deptId是受检单位,返回true + */ + boolean isCompany(Long deptId); + + /** + * 根据pid返回下级部门 + * @param pid 父级单位id + * @return 所有下级部门 + */ + List treeByDept(String pid); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemLocationService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemLocationService.java new file mode 100644 index 0000000..6945f8c --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemLocationService.java @@ -0,0 +1,30 @@ +package com.casic.missiles.service.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.model.system.SystemLocation; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface ISystemLocationService extends IService { + + void add(SystemLocation systemLocation); + + void update(SystemLocation systemLocation); + + void delete(SystemLocation systemLocation); + + Page listPage(Page page, Long searchId,Long positionId, String installLocation); + + List list(Long searchId,Long positionId, String installLocation); + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java new file mode 100644 index 0000000..9251df5 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java @@ -0,0 +1,145 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.mapper.system.SystemLocationMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.service.system.ISystemPositionService; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemLocationServiceImpl extends ServiceImpl implements ISystemLocationService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + private final ISystemPositionService positionService; + + @Override + public void add(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setCreateUser(authService.getLoginUser().getId()); + systemLocation.setCreateTime(new Date()); + this.save(systemLocation); + } + + private void fillLocation(SystemLocation systemLocation) { + Long chooseDeptId = systemLocation.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemLocation.setSubSystemId(null); + systemLocation.setDeptId(chooseDeptId); + systemLocation.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemLocation.setSubSystemId(chooseDeptId); + systemLocation.setDeptId(chooseDept.getPid()); + systemLocation.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setUpdateUser(authService.getLoginUser().getId()); + systemLocation.setUpdateTime(new Date()); + this.updateById(systemLocation); + } + + @Override + public void delete(SystemLocation systemLocation) { + Long positionId = systemLocation.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(positionId)){ + queryWrapper.eq("position_id",positionId); + } + if(StrUtil.isNotEmpty(installLocation)){ + queryWrapper.like("install_location", installLocation); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemLocation systemLocation){ + systemLocation.setCompanyName(deptService.getDeptName(systemLocation.getCompanyId())); + systemLocation.setDeptName(deptService.getDeptName(systemLocation.getDeptId())); + systemLocation.setSubSystemName(deptService.getDeptName(systemLocation.getSubSystemId())); + systemLocation.setPositionName(positionService.getNameById(systemLocation.getPositionId())); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java index f197fa6..f68b96e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.service.impl.system; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; @@ -16,7 +18,9 @@ import com.casic.missiles.mapper.system.SystemNoticeUserRelationMapper; import com.casic.missiles.model.system.SystemNotice; import com.casic.missiles.model.system.SystemNoticeUserRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.IBoardMessageService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.service.system.ISystemNoticeService; import com.casic.missiles.service.system.ISystemNoticeUserRelationService; import com.casic.missiles.utils.ConvertUtils; @@ -48,12 +52,22 @@ @Autowired private IBoardMessageService boardMessageService; + @Autowired + private ISystemDeptService systemDeptService; + @Autowired + private AbstractDeptService deptService; + @Override public Page listPage(Page page, NoticeListRequest request) { AuthUser user = ShiroKit.getUser(); if(!Objects.isNull(user)){ request.setUserId(user.getId()); } + Dept company = systemDeptService.getUserCompany(); + request.setUserCompanyName(company.getFullName()); + List allDeptList = deptService.list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + request.setTopCompanyName(top.getFullName()); Page noticePage = noticeMapper.selectListPage(page, request); return noticePage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java new file mode 100644 index 0000000..3b2e9f4 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java @@ -0,0 +1,149 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.mapper.system.SystemPositionMapper; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemPositionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-岗位管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemPositionServiceImpl extends ServiceImpl implements ISystemPositionService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + + @Override + public void add(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setCreateUser(authService.getLoginUser().getId()); + systemPosition.setCreateTime(new Date()); + this.save(systemPosition); + } + + private void fillPosition(SystemPosition systemPosition) { + Long chooseDeptId = systemPosition.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemPosition.setSubSystemId(null); + systemPosition.setDeptId(chooseDeptId); + systemPosition.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemPosition.setSubSystemId(chooseDeptId); + systemPosition.setDeptId(chooseDept.getPid()); + systemPosition.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setUpdateUser(authService.getLoginUser().getId()); + systemPosition.setUpdateTime(new Date()); + this.updateById(systemPosition); + } + + @Override + public void delete(SystemPosition systemPosition) { + Long positionId = systemPosition.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId, String positionName) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(StrUtil.isNotEmpty(positionName)){ + queryWrapper.like("position_name", positionName); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemPosition systemPosition){ + systemPosition.setCompanyName(deptService.getDeptName(systemPosition.getCompanyId())); + systemPosition.setDeptName(deptService.getDeptName(systemPosition.getDeptId())); + systemPosition.setSubSystemName(deptService.getDeptName(systemPosition.getSubSystemId())); + } + + @Override + public String getNameById(Long positionId) { + SystemPosition position = this.getById(positionId); + if(ObjectUtil.isNotEmpty(position)){ + return position.getPositionName(); + } + return null; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java index 5c841ed..dac2ff7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.impl.system; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -80,9 +81,13 @@ private void wrapper(SystemSign systemSign){ User user = userMapper.selectById(systemSign.getSignUserId()); - systemSign.setSignDeptId(user.getDeptId()); - Dept dept = deptMapper.selectById(user.getDeptId()); - systemSign.setSignDeptName(dept.getFullName()); + if(ObjectUtil.isNotEmpty(user)){ + systemSign.setSignDeptId(user.getDeptId()); + Dept dept = deptMapper.selectById(user.getDeptId()); + if(ObjectUtil.isNotEmpty(dept)){ + systemSign.setSignDeptName(dept.getFullName()); + } + } } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java index b5a8a56..abbd428 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java @@ -21,4 +21,6 @@ InspectionApprovalForm detail(Long inspectionId); + String checkApproval(InspectionApprovalForm approvalForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java index 791794d..a96dfec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java @@ -30,5 +30,5 @@ Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm); EquipmentStatusApproval approvalInfoDetail(Long approvalId); - + void updateStatusAndSaveLog(EquipmentStatusApproval approval); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java index f4134d0..a87ead5 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java @@ -20,7 +20,5 @@ void saveLog(Long equipmentId,String statusType,String reason); - void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName); - List listByEquipment(Long equipmentId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java index a821d17..6db70cd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java @@ -1,12 +1,44 @@ package com.casic.missiles.service.system; +import com.casic.missiles.core.node.ZTreeNode; import com.casic.missiles.modular.system.model.Dept; + import java.util.List; public interface ISystemDeptService { + /** + * 获取用户所在单位(受检单位级别) + * @return 所在单位(顶级用户返回顶级) + */ Dept getUserCompany(); + /** + * 获取用户所属部门(连级) + * @param companyId 单位id + * @return 受检单位用户返回单位下的所有连,连级/分系统级 返回所在连 + */ + List getUserDeptList(Long companyId); + + /** + * 返回所有受检单位 + * @return 受检单位列表 + */ List getAllCompanyList(); + + /** + * 判断单位是否是受检单位 + * @param deptId 单位id + * @return deptId是受检单位,返回true + */ + boolean isCompany(Long deptId); + + /** + * 根据pid返回下级部门 + * @param pid 父级单位id + * @return 所有下级部门 + */ + List treeByDept(String pid); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemLocationService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemLocationService.java new file mode 100644 index 0000000..6945f8c --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemLocationService.java @@ -0,0 +1,30 @@ +package com.casic.missiles.service.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.model.system.SystemLocation; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface ISystemLocationService extends IService { + + void add(SystemLocation systemLocation); + + void update(SystemLocation systemLocation); + + void delete(SystemLocation systemLocation); + + Page listPage(Page page, Long searchId,Long positionId, String installLocation); + + List list(Long searchId,Long positionId, String installLocation); + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemPositionService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemPositionService.java new file mode 100644 index 0000000..2bcd0ef --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemPositionService.java @@ -0,0 +1,33 @@ +package com.casic.missiles.service.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface ISystemPositionService extends IService { + + void add(SystemPosition systemPosition); + + void update(SystemPosition systemPosition); + + void delete(SystemPosition systemPosition); + + Page listPage(Page page, Long searchId, String positionName); + + List list(Long searchId, String positionName); + + String getNameById(Long positionId); + + +} diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index 7bce6a9..786e581 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -17,12 +17,12 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.github.oshi diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java index 10a034b..a4d403d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/AssigneeSetTypeEnum.java @@ -11,6 +11,7 @@ Integer LEADER = 2; Integer SELF_SELECT = 4; Integer SELF = 5; + Integer LEADER_LEVEL = 6; Integer LEADER_TOP = 7; Integer ROLE = 11; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java index 1ab70c0..ffa1ffc 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/system/DeptTypeEnum.java @@ -6,10 +6,8 @@ * @Date: 2023/7/20 18:00 */ public interface DeptTypeEnum { - //管理部门 - String MANAGE_DEPT = "1"; - //业务部门 - String BIS_DEPT = "2"; - //检定部门 - String MEASURE_DEPT = "3"; + // 计量单位 + Integer METER_DEPT = 1; + // 受检单位 + Integer METERED_DEPT = 2; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 097a336..adea249 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -9,11 +9,14 @@ import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; +import com.casic.missiles.modular.system.dao.RoleMapper; import com.casic.missiles.modular.system.dao.RuRelationMapper; import com.casic.missiles.modular.system.dao.UserMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Role; import com.casic.missiles.modular.system.model.RuRelation; import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.utils.SysDeptAndUserUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RepositoryService; @@ -53,6 +56,8 @@ @Resource private UserMapper userMapper; @Resource + private RoleMapper roleMapper; + @Resource private DeptMapper deptMapper; //每个任务节点的开始就会执行,在userTask中设置该监听器,保证审批人设置成功 @@ -77,6 +82,9 @@ JSONObject nodeConfig = jsonObject.getJSONObject("nodeConfig"); JSONObject nodeUserJsonObject = getNodeUserList(nodeConfig, taskId); if (Objects.isNull(nodeUserJsonObject)) { + nodeUserJsonObject = getNodeUserList2(nodeConfig, taskId); + } + if (Objects.isNull(nodeUserJsonObject)) { log.error("监听器查找审批人失败,该任务不存在,flowDef json:{}", systemFlowForm.getFlowDef()); return; } @@ -100,8 +108,13 @@ ruWrapper.eq("ROLEID", targetId); List ruRelations = ruRelationMapper.selectList(ruWrapper); if (!CollectionUtils.isEmpty(ruRelations)) { - List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); - assigneeList.addAll(collect); + List collect = ruRelations.stream().map(RuRelation::getUserId).collect(Collectors.toList()); + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.in("id", collect); + wrapper1.eq("status", 1); + List users = userMapper.selectList(wrapper1); + List userIdList = users.stream().map(User::getId).map(x -> x + "").collect(Collectors.toList()); + assigneeList.addAll(userIdList); } } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id @@ -118,17 +131,28 @@ // 选择主管作为审批人 String startUserId = execution.getVariable("root", String.class); User user = userMapper.selectById(startUserId); + + //申请人为部门部门负责人,审批人为上级部门负责人 + QueryWrapper ruRelationWrapper = new QueryWrapper<>(); + ruRelationWrapper.eq("userid", user.getId()); + List ruRelations = ruRelationMapper.selectList(ruRelationWrapper); + List roleIds = ruRelations.stream().map(RuRelation::getRoleId).collect(Collectors.toList()); + QueryWrapper roleWrapper = new QueryWrapper<>(); + roleWrapper.in("id", roleIds); + List roles = roleMapper.selectList(roleWrapper); + List collectTips = roles.stream().map(Role::getTips).collect(Collectors.toList()); + Long deptId = user.getDeptId(); + if (collectTips.contains("director")) { + Dept dept = deptMapper.selectById(deptId); + deptId = dept.getPid(); + } + //根据发起人查部门,根据部门查主管角色查主管,每个部门只有一个主管,根据角色和部门获取主管 //sys_role表tips字段区分角色,director定义为主管角色 - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE sr.DEPT_ID = {0}" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {0}", String.valueOf(user.getDeptId()), "director"); - Map idMap = list.get(0); - String id = String.valueOf(idMap.get("id")); - assigneeList.add(id); + List directorId = SysDeptAndUserUtil.getDeptDirectorIdByDeptId(deptId); + if(!CollectionUtils.isEmpty(directorId)){ + assigneeList.addAll(directorId); + } } else if (AssigneeSetTypeEnum.SELF_SELECT == settype) { // TODO: 2022/12/27 发起人自选审批人(需求暂无此功能) @@ -136,6 +160,83 @@ //启动流程时设置的发起人全局变量 String startUserId = execution.getVariable("root", String.class); assigneeList.add(startUserId); + + } else if (AssigneeSetTypeEnum.LEADER_LEVEL == settype) { + //节点选择某级主管审批,级别最小是2,需要保证每级必须有主管(后续可以优化为用父部门获取某级主管)。1级用直接主管配置节点即可 + String startUserId = execution.getVariable("root", String.class); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + List> userIdList = getLeaderByUserId(startUserId); + if (CollectionUtils.isEmpty(userIdList)) { + return; + } + //取其中一个主管,为获取该主管的上级主管用 + Map tIdMap = userIdList.get(0); + String userId = String.valueOf(tIdMap.get("id")); + + if (2 == directorLevel) { + userIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } else if (3 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + tUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } else if (4 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + fUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } else if (5 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } else if (6 == directorLevel) { + List> tUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(tUserIdList)) { + Map fIdMap = tUserIdList.get(0); + userId = String.valueOf(fIdMap.get("id")); + List> fUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fUserIdList)) { + Map fiIdMap = fUserIdList.get(0); + userId = String.valueOf(fiIdMap.get("id")); + List> fiUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(fiUserIdList)) { + Map sIdMap = fiUserIdList.get(0); + userId = String.valueOf(sIdMap.get("id")); + List> sUserIdList = getLeaderByUserId(userId); + if (!CollectionUtils.isEmpty(sUserIdList)) { + fiUserIdList.forEach(idMap -> { + assigneeList.add(String.valueOf(idMap.get("id"))); + }); + } + } + } + } + } + } else if (AssigneeSetTypeEnum.LEADER_TOP == settype) { //连续多级主管作为审批人,审批方式由多人审批时审批方式字段决定 //根据发起人查部门,根据部门查主管角色,根据发起人部门查父部门,根据父部门查主管角色,递归 @@ -147,33 +248,9 @@ //循环查询发起人的主管id //directorLevel一定大于1,前端做下拉限制从2级起 - Integer directorLevel = nodeConfig.getInteger("directorLevel"); - for (int i = 1; i <= directorLevel; i++) { - User user = userMapper.selectById(startUserId); - Long deptId = user.getDeptId(); - Dept dept = deptMapper.selectById(deptId); - String pids = dept.getPids(); - List deptIds = new ArrayList<>(); - if(StringUtils.isNotEmpty(pids)){ - String replace = pids.replace("[", "").replace("]", ""); - pids = replace.substring(0, replace.length() - 1); - //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 - deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); - } - if(i > 1){ - //主管获取所在的上级部门 - deptId = dept.getPid(); - } - //保证无父id时deptIds有值,sql正常执行 - if(CollectionUtils.isEmpty(deptIds)){ - deptIds.add(String.valueOf(deptId)); - } - List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + - "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + - "JOIN sys_user su ON srr.USERID = su.ID " + - "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" + - "AND sr.TIPS = {1}" + - "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + Integer directorLevel = nodeUserJsonObject.getInteger("directorLevel"); + for (int i = 2; i <= directorLevel; i++) { + List> list = getLeaderByUserId(startUserId); if(CollectionUtils.isEmpty(list)){ break; } @@ -182,7 +259,6 @@ assigneeList.add(id); startUserId = id; } - // TODO: 2023/1/13 以上逻辑需联调测试验证 } } @@ -237,4 +313,45 @@ return null; } + /** + * getNodeUserList分支后节点情况补充 + */ + private JSONObject getNodeUserList2(JSONObject nodeConfig, String taskId) { + JSONObject childNode = nodeConfig.getJSONObject("childNode"); + if (!Objects.isNull(childNode) && StringUtils.isNotEmpty(childNode.getString("id")) && taskId.equals(childNode.getString("id"))) { + return childNode; + } + if(!Objects.isNull(childNode) && !Objects.isNull(childNode.getJSONArray("conditionNodes"))){ + return getNodeUserList(childNode, taskId); + } + return null; + } + + /** + * 用户id获取上级部门负责人用户id列表 + * @param startUserId + * @return + */ + private List> getLeaderByUserId(String startUserId) { + User user = userMapper.selectById(startUserId); + Long deptId = user.getDeptId(); + Dept dept = deptMapper.selectById(deptId); + String pids = dept.getPids(); + List deptIds = new ArrayList<>(); + if(StringUtils.isNotEmpty(pids)){ + String replace = pids.replace("[", "").replace("]", ""); + pids = replace.substring(0, replace.length() - 1); + //在角色管理中配置的角色所在组织机构,要保证该机构的子组织结构使用该角色也可以生效 + deptIds = new ArrayList<>(Arrays.asList(pids.split(","))); + } + //主管获取所在的上级部门 + deptId = dept.getPid(); + //保证无父id时deptIds有值,sql正常执行 + if(CollectionUtils.isEmpty(deptIds)){ + deptIds.add(String.valueOf(deptId)); + } + List> list = SysDeptAndUserUtil.getUserIdsByDeptIdAndDeptIds(deptIds, deptId); + return list; + } + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java index 2039244..1198f89 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/CasicBeanUtil.java @@ -1,6 +1,8 @@ package com.casic.missiles.utils; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; @@ -66,6 +68,52 @@ return true; } + public static JSONArray fieldCompareDetail(Object beforeObj, Object afterObj, List fields) { + List beforeFieldList = Arrays.asList(beforeObj.getClass().getDeclaredFields()); + List superBeforeFileList = Arrays.asList(beforeObj.getClass().getSuperclass().getDeclaredFields()); + beforeFieldList.addAll(new ArrayList<>(superBeforeFileList)); + Field[] beforeFields = beforeFieldList.toArray(new Field[beforeFieldList.size()]); + + List afterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getDeclaredFields())); + List superAfterFieldList = new ArrayList<>(Arrays.asList(afterObj.getClass().getSuperclass().getDeclaredFields())); + afterFieldList.addAll(superAfterFieldList); + Field[] afterFields = afterFieldList.toArray(new Field[beforeFieldList.size()]); + + Field.setAccessible(beforeFields, true); //设置私有属性可以访问到 + Field.setAccessible(afterFields, true); + + JSONArray res = new JSONArray(); + //循环遍历比较属性 + if (beforeFields.length > 0) { + for (int i = 0; i < beforeFields.length; i++) { + if (ObjectUtil.isEmpty(fields) || fields.contains(beforeFields[i].getName())) { + try { + Object beforeValue = beforeFields[i].get(beforeObj); //取出对应的属性值 + Object afterValue = null; + for (int j = 0; j < afterFields.length; j++) { + if(afterFields[j].getName().equals(beforeFields[i].getName())){ + afterValue = afterFields[j].get(afterObj); //取出对应的属性值 + break; + } + } + if ((beforeValue != null && !"".equals(beforeValue) && !beforeValue.equals(afterValue)) || ((beforeValue == null || "".equals(beforeValue)) && afterValue != null && !"".equals(afterValue))) { + JSONObject item = new JSONObject(); + item.put("field",beforeFields[i].getName()); + item.put("oldVal",beforeValue); + item.put("newVal",afterValue); + res.add(item); + } + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + } + } + } + + + return res; + } + public static void copySpecifyProperties(Object source, Object target, String... copyProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java new file mode 100644 index 0000000..3db6a7d --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/ExUtils.java @@ -0,0 +1,19 @@ +package com.casic.missiles.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; + +/** + * @Description: flowable条件表达式(setConditionExpression)执行的bean + * @Author: wangpeng + * @Date: 2023/1/8 14:27 + */ +@Component +public class ExUtils { + public Boolean strContains(String controlId,String...values){ + List list = Arrays.asList(values); + return list.contains(controlId); + } +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java new file mode 100644 index 0000000..aa92464 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/SysDeptAndUserUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.utils; + +import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/8/12 11:24 + */ +public class SysDeptAndUserUtil { + + /** + * 根据部门获取部门负责人id列表 + * @param deptId + * @return + */ + public static List getDeptDirectorIdByDeptId(Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + +// "WHERE sr.DEPT_ID = {0}" + + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {0}", String.valueOf(deptId), "director"); + List userIdList = new ArrayList<>(); + if(!CollectionUtils.isEmpty(list)){ + list.forEach(idMap -> { + userIdList.add(String.valueOf(idMap.get("id"))); + }); + } + return userIdList; + } + + /** + * 根据用户id获取该用户为主管时的部门信息 + * @param userId + * @return + */ + public static Map getDirectDeptByUserId(Long userId) { + Map resultMap = SqlRunner.db().selectOne( + "SELECT su.DEPT_ID as deptId, sd.SIMPLE_NAME AS deptName FROM sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1) " + + "JOIN sys_dept sd ON su.DEPT_ID = sd.ID " + + "WHERE su.ID = {0}" + + "AND sr.TIPS = {1}", String.valueOf(userId), "director"); + return resultMap; + } + + public static List> getUserIdsByDeptIdAndDeptIds(List deptIds, Long deptId){ + List> list = SqlRunner.db().selectList("select su.ID as id from sys_role sr " + + "JOIN sys_ru_relation srr ON sr.ID = srr.ROLEID " + + "JOIN sys_user su ON (srr.USERID = su.ID AND su.STATUS = 1)" + +// "WHERE (sr.DEPT_ID = {2} or sr.DEPT_ID in {0})" +//角色所在的组织机构及该结构的子结构 + "WHERE "+ + "sr.TIPS = {1}" + + "AND su.DEPT_ID = {2}", deptIds, "director", String.valueOf(deptId)); + return list; + } + + + +} diff --git a/casic-metering-dao/pom.xml b/casic-metering-dao/pom.xml index 3518b0c..4fe8f29 100644 --- a/casic-metering-dao/pom.xml +++ b/casic-metering-dao/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,7 +16,7 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java index f8fdff4..4c16d34 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/board/BoardMessageMapper.java @@ -23,7 +23,8 @@ List noticeMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, - @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName); + @Param("userCompanyId") Long userCompanyId, @Param("userCompanyName") String userCompanyName, + @Param("topCompanyName")String topCompanyName); List remindMessagePage(@Param("page") Page page, @Param("ew") QueryWrapper ew, @Param("userId") Long userId, @Param("userName") String userName); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java index 8594bae..14d8a51 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BizBusinessOrderInfoMapper.java @@ -1,7 +1,11 @@ package com.casic.missiles.mapper.business; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +19,7 @@ Long selectMaxOrderNo(); + List checkSamples(@Param("sampleIds")List sampleIds, + @Param("orderId")Long orderId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java index c668e55..921a6a5 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/business/BusinessOrderListResponseMapper.java @@ -1,7 +1,15 @@ package com.casic.missiles.mapper.business; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.business.OrderListResponse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface BusinessOrderListResponseMapper extends BaseMapper { + + List listPage(@Param("page")Page page, + @Param("ew")QueryWrapper ew); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java index b8ed4da..a755b10 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentGroupInfoMapper.java @@ -1,8 +1,13 @@ package com.casic.missiles.mapper.equipment; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** *

@@ -15,4 +20,7 @@ @InterceptorIgnore(tenantLine = "true") public interface EquipmentGroupInfoMapper extends BaseMapper { + List listPage(@Param("page") Page page, + @Param("ew")QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 3b59797..c004670 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -1,10 +1,16 @@ package com.casic.missiles.mapper.equipment; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** *

* 受检设备-设备台账-审批记录表 Mapper 接口 @@ -19,4 +25,13 @@ Long selectMaxNo(@Param("equipmentType")String equipmentType); Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); + + String checkLocation(@Param("installLocationId")Long installLocationId, + @Param("usageStatus")String usageStatus, + @Param("equipmentId")Long equipmentId); + + List selectListPage(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + + List selectList(@Param("ew") QueryWrapper queryWrapper); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java index cde328c..219d6d8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoMapper.java @@ -41,9 +41,14 @@ List bizCertificateList(@Param("equipmentId") Long equipmentId); - List selectRemindListPage(@Param("page") Page page, @Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindListPage(@Param("page") Page page, + @Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); - List selectRemindList(@Param("dataScope") DataScope dataScope, @Param("ew") QueryWrapper queryWrapper); + List selectRemindList(@Param("dataScope") DataScope dataScope, + @Param("ew") QueryWrapper queryWrapper, + @Param("checkedStatus") List checkedStatus); diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java index 025b0f0..82814ec 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModelInfoMapper.java @@ -30,4 +30,6 @@ @Param("page") Page page, @Param("ew")QueryWrapper queryWrapper); + String getLabLocation(@Param("companyId") Long companyId); + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java new file mode 100644 index 0000000..4b6f2f4 --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentModifyLogMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检设备-设备台账-设备变更记录 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface EquipmentModifyLogMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java new file mode 100644 index 0000000..40d93cd --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemDeptMapper.java @@ -0,0 +1,13 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.node.ZTreeNode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface SystemDeptMapper { + + List treeByDept(@Param("pid") String pid, @Param("deptType") String deptType, @Param("tips") String tips); + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java new file mode 100644 index 0000000..9f0a90c --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemLocationMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-安装位置管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemLocationMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java new file mode 100644 index 0000000..9431d8d --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/system/SystemPositionMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.system; + +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 受检系统-系统管理-岗位管理 Mapper 接口 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface SystemPositionMapper extends BaseMapper { + +} diff --git a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml index 94f74dd..80017a5 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/BoardMessageMapper.xml @@ -143,7 +143,7 @@ set_top as set_top from system_notice where system_type = '2' and id not in (select biz_id from message_1 where message_module = '通知公告' and message_type = '单位通知') - and notice_company = #{userCompanyName} + and (notice_company = #{userCompanyName} or notice_company = #{topCompanyName}) ), message_3 as ( select diff --git a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml index 278476b..bc0135b 100644 --- a/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/board/NoticeBoardMapper.xml @@ -31,7 +31,7 @@ 0 ) AS yearChecked - FROM eqpt_equipment_info e + FROM eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id LEFT JOIN sys_dept d ON e.dept_id = d.id WHERE @@ -60,8 +60,9 @@ dept_id as deptId, director_name as directorName, certificate_valid as certificateValid, - usage_status as usageStatus - from eqpt_equipment_info + usage_status as usageStatus, + model as model + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -102,10 +103,11 @@ e.director_name as directorName, e.certificate_valid as certificateValid, e.usage_status as usageStatus, + e.model as model, r.real_deliver_time, '西昌卫星发射中心计量测试站' as checkOrganization, r.sample_status as sampleStatus - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -140,7 +142,7 @@ #{item} ,1,0)) as checked - from eqpt_equipment_info e + from eqpt_equipment_info_view e LEFT JOIN latest_relation r ON e.id = r.sample_id @@ -161,19 +163,19 @@ UNION ALL SELECT sample_id AS equipment_id, expiration_date AS certificate_valid - FROM biz_business_certificate_report + FROM biz_business_certificate_report_view WHERE approval_status = '4' AND expiration_date IS NOT NULL UNION ALL SELECT id AS equipment_id, certificate_valid - FROM eqpt_equipment_info + FROM eqpt_equipment_info_view ) SELECT count( DISTINCT e.id ) as count, DATE_FORMAT( c.certificate_valid, '%Y-%m' ) as name FROM - eqpt_equipment_info e + eqpt_equipment_info_view e RIGHT JOIN certificate_info c ON e.id = c.equipment_id WHERE e.is_del = 0 AND e.equipment_type = '1' AND c.certificate_valid = ]]> #{startTime} @@ -192,7 +194,7 @@ count( DISTINCT e.id ) AS count, DATE_FORMAT( r.measure_complete_time, '%Y-%m' ) AS NAME FROM - eqpt_equipment_info e + eqpt_equipment_info_view e LEFT JOIN biz_business_order_sample_relation r ON e.id = r.sample_id WHERE r.sample_status IN diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml index 18476de..a536f10 100644 --- a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderInfoMapper.xml @@ -37,4 +37,24 @@ + + + diff --git a/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml new file mode 100644 index 0000000..e65b78e --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/business/BizBusinessOrderListResponseMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, order_no, deliverer_id, deliverer, customer_id, customer_name, deliverer_tel, plan_deliver_time, require_over_time, customer_address, customer_phone, is_urgent, maintain_major, undertaker_id, measure_company, undertaker_name, undertake_time, receive_status, receive_illustrate, create_user_id, create_user_name, create_time, update_time + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml index 8667ec0..79b29e8 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupInfoMapper.xml @@ -18,4 +18,27 @@ id, group_name, create_user_id, create_user_name, create_time, update_time, remark + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml index 852b4dc..373adcb 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentGroupRelationMapper.xml @@ -26,6 +26,9 @@ e.equipment_no as equipmentNo, e.equipment_name as equipmentName, e.model as model, + e.manufacture_no as manufactureNo, + e.manufacturer as manufacturer, + e.usage_status as usageStatus, e.director_name as directorName, e.meter_identify as meterIdentify, e.certificate_valid as certificateValid, @@ -33,7 +36,7 @@ e.install_location_ext as installLocationExt FROM eqpt_equipment_group_relation r - LEFT JOIN eqpt_equipment_info e ON r.equipment_id = e.id + LEFT JOIN eqpt_equipment_info_view e ON r.equipment_id = e.id WHERE r.group_id = #{groupId} diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index a9033f9..c49776d 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -4,71 +4,112 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + id + , approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + ,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction + + + + + + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml index 72837e6..834f20e 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml @@ -42,6 +42,12 @@ + + + + + +
@@ -50,12 +56,20 @@ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time, - is_del,model_id,help_instruction + is_del,model_id,help_instruction,use_position_id,director_id,install_location_id,check_destination,limit_instruction select - from eqpt_equipment_info + from eqpt_equipment_info_view ${ew.sqlSegment} @@ -110,7 +124,7 @@ eqpt_remind_all as ( select e.id as equipment_id, - IFNULL(m.remind_time,0) as remind_time + IFNULL(m.remind_time,90) as remind_time from eqpt_equipment_info e left join eqpt_remind m on e.id = m.equipment_id ), @@ -118,20 +132,31 @@ select id,task_name,CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),"~",DATE_FORMAT(end_time,'%Y-%m-%d')) as time_ext,start_time,end_time from eqpt_equipment_task_info ), + latest_sample_relation AS ( + SELECT * + FROM biz_business_order_sample_relation a + WHERE id = ( + SELECT max( id ) + FROM biz_business_order_sample_relation b + WHERE a.sample_id = b.sample_id ) + ), eqpt_ext as ( select e.* , - DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, - GROUP_CONCAT(t.task_name) as taskNames, - GROUP_CONCAT(t.time_ext) as taskTimes, - GROUP_CONCAT(t.id) as taskIds, - min(t.start_time) as task_start_time, - max(t.end_time) as task_end_time - from eqpt_equipment_info e + DATE_SUB(e.certificate_valid,INTERVAL a.remind_time DAY) AS remind_valid, + GROUP_CONCAT(t.task_name) as taskNames, + GROUP_CONCAT(t.time_ext) as taskTimes, + GROUP_CONCAT(t.id) as taskIds, + min(t.start_time) as task_start_time, + max(t.end_time) as task_end_time, + (case when lsr.sample_status in + #{item} + then 1 else 0 end) as check_status + from eqpt_equipment_info_view e left join eqpt_remind_all a on e.id = a.equipment_id left join eqpt_equipment_task_relation r on e.id = r.equipment_id left join task_ext t on r.task_id = t.id - where e.certificate_valid is not null - group by e.id,e.certificate_valid,a.remind_time + left join latest_sample_relation lsr on lsr.sample_id = e.id + group by e.id,e.certificate_valid,a.remind_time,lsr.sample_status ) select * from eqpt_ext @@ -163,6 +188,9 @@ e.equipment_name as equipmentName, e.meter_identify as meterIdentify, e.dept_id as deptId, + e.model as model, + e.company_id as companyId, + e.manufacture_no as manufactureNo, c.certificate_report_no as certificateNo, c.certificate_report_name as certificateName, '西昌卫星发射中心计量测试站' as checkOrganization, @@ -173,7 +201,7 @@ c.update_time as updateTime, '1' as certificateType, c.remark as remark - from biz_business_certificate_report c ,eqpt_equipment_info e + from biz_business_certificate_report_view c ,eqpt_equipment_info_view e where c.sample_id = e.id diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml index 097c405..2ddebe6 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModelInfoMapper.xml @@ -5,7 +5,7 @@ - + @@ -13,6 +13,7 @@ + @@ -21,7 +22,7 @@ - id, model_no, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, create_user_id, create_dept_id, create_time, update_time + id, equipment_type, equipment_name, model, help_instruction, category, check_cycle, instructions_file, remark, inspectable, create_user_id, create_dept_id, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml new file mode 100644 index 0000000..f1b61be --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentModifyLogMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + id, equipment_id, content, operate_user_id, operate_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml new file mode 100644 index 0000000..093586f --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemDeptMapper.xml @@ -0,0 +1,51 @@ + + + + + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + CONCAT + ('%[', + #{pid,jdbcType=VARCHAR}, + ']%' + ) + + + '%[' || + #{pid,jdbcType=VARCHAR} + || + ']%' + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml new file mode 100644 index 0000000..aceaed6 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemLocationMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_id, install_location, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml index 343cd0c..bcb1d2c 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemNoticeMapper.xml @@ -32,7 +32,7 @@ SELECT sn.*, IF(snur.user_id IS NULL, 0, 1) already_read FROM system_notice sn LEFT JOIN system_notice_user_relation snur ON (sn.id = snur.notice_id AND snur.user_id = #{request.userId}) - WHERE 1=1 + WHERE (notice_company = #{request.userCompanyName} or notice_company = #{request.topCompanyName}) AND sn.system_type = #{request.systemType} diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml new file mode 100644 index 0000000..b225e47 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemPositionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, company_id, dept_id, sub_system_id, position_name, remarks, create_user, update_user, create_time, update_time + + + diff --git a/casic-metering-eqpt-api/pom.xml b/casic-metering-eqpt-api/pom.xml index 4de80d0..3eb527f 100644 --- a/casic-metering-eqpt-api/pom.xml +++ b/casic-metering-eqpt-api/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -18,13 +18,13 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-job - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java index c69cc82..d1a2bd1 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentGroupController.java @@ -7,6 +7,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.service.equipment.IEquipmentGroupInfoService; import io.swagger.annotations.Api; @@ -60,14 +61,11 @@ return ReturnUtil.success(); } - @ApiImplicitParams({ - @ApiImplicitParam(name = "groupName",value = "分组名称",dataType = "String",paramType = "query") - }) @ApiOperation("分组分页列表") - @GetMapping("listPage") - public ReturnDTO> listPage(String groupName){ + @PostMapping("listPage") + public ReturnDTO> listPage(@RequestBody EquipmentGroupQueryForm queryForm){ Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,groupName))); + return ReturnUtil.success(super.packForBT(groupInfoService.listPage(page,queryForm))); } @ApiImplicitParams({ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java index 56b6814..d35e7a7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentInfoController.java @@ -1,6 +1,8 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; @@ -11,11 +13,13 @@ import com.casic.missiles.dto.business.LabelBindDTO; import com.casic.missiles.dto.equipment.*; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.docx4j.wml.R; @@ -25,6 +29,7 @@ import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -36,6 +41,14 @@ public class EquipmentInfoController extends ExportController { private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService approvalService; + + @ApiOperation("直接编辑设备") + @PostMapping("/info/update") + public ReturnDTO update(@RequestBody EquipmentApprovalForm approvalForm){ + approvalService.updateEquipmentInfo(approvalForm); + return ReturnUtil.success(); + } @ApiOperation("设备分页列表") @PostMapping("/info/listPage") @@ -99,8 +112,19 @@ @PostMapping("/info/import") @ResponseBody public ReturnDTO infoImport(@RequestParam("file") MultipartFile file, @RequestParam("equipmentType")String equipmentType) throws IOException { - equipmentInfoService.infoImport(file,equipmentType); - return ReturnUtil.success(); + EquipmentImportDuplicationResult result = equipmentInfoService.infoImport(file,equipmentType); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行设备信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行设备信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); } @ApiOperation("到期提醒分页列表") @@ -152,5 +176,14 @@ return ReturnUtil.success(); } + @ApiOperation("到期提醒分页列表") + @PostMapping("/orderSelect/listPage") + @ResponseBody + public ReturnDTO> EquipmentOrderSelectQueryForm(@RequestBody EquipmentRemindQueryForm queryForm) { + Page page = PageFactory.defaultPage(); + page = equipmentInfoService.orderSelectListPage(page, queryForm); + return ReturnUtil.success(super.packForBT(page)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java index 044d245..0342eb8 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModelInfoController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.equipment; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,6 +9,9 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.model.response.ResponseData; @@ -17,8 +21,10 @@ import lombok.RequiredArgsConstructor; import org.docx4j.wml.R; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.ArrayList; import java.util.List; /** @@ -103,17 +109,40 @@ @ApiOperation("设备名称列表") @GetMapping("listEquipmentName") - public ReturnDTO> listEquipmentName(){ - return ReturnUtil.success(modelInfoService.listEquipmentName()); + public ReturnDTO> listEquipmentName(String equipmentType){ + return ReturnUtil.success(modelInfoService.listEquipmentName(equipmentType)); } @ApiOperation("规格型号列表") @GetMapping("listModel") - public ReturnDTO> listModel(String equipmentName){ - return ReturnUtil.success(modelInfoService.listModel(equipmentName)); + public ReturnDTO> listModel(String equipmentType, String equipmentName){ + return ReturnUtil.success(modelInfoService.listModel(equipmentType,equipmentName)); } + @ApiOperation("获取默认检定去向") + @GetMapping("defaultCheckDestination") + public ReturnDTO defaultCheckDestination(Long modelId, Long companyId){ + return ReturnUtil.success(modelInfoService.defaultCheckDestination(modelId,companyId)); + } + @ApiOperation("设备导入") + @PostMapping("/import") + @ResponseBody + public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException { + EquipmentImportDuplicationResult result = modelInfoService.batchImport(file); + List messages = new ArrayList<>(); + if(CollUtil.isNotEmpty(result.getUnDuplicationResult())){ + messages.add(String.format("成功导入%d条数据",result.getUnDuplicationResult().size())); + } + if(CollUtil.isNotEmpty(result.getHasExist())){ + messages.add(String.format("第%s行规格型号信息已存在", StrUtil.join("、",result.getHasExist()))); + } + if(CollUtil.isNotEmpty(result.getTableDuplication())){ + messages.add(String.format("第%s行规格型号信息在导入表中重复", StrUtil.join("、",result.getTableDuplication()))); + } + String message = StrUtil.join(",",messages); + return CollUtil.isNotEmpty(result.getUnDuplicationResult()) ? ReturnUtil.success(200,message) : ReturnUtil.failed(message); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java new file mode 100644 index 0000000..a65c4df --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/equipment/EquipmentModifyLogController.java @@ -0,0 +1,36 @@ +package com.casic.missiles.controller.equipment; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Api(tags = "设备变更记录") +@RestController +@RequestMapping("/equipment") +@RequiredArgsConstructor +public class EquipmentModifyLogController { + + private final IEquipmentModifyLogService modifyLogService; + + @GetMapping("/modifyLogs") + public ReturnDTO> list(Long equipmentId){ + return ReturnUtil.success(modifyLogService.listByEquipment(equipmentId)); + } + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java index 444318c..6b3af95 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizBusinessOrderInfoController.java @@ -72,6 +72,15 @@ return businessOrderService.addOrder(businessOrder); } + @ApiOperation("任务单检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ReturnUtil.success(businessOrderService.checkOrder(businessOrder)); + } + @ApiOperation("任务单更新") @PostMapping("/update") public ReturnDTO orderUpdate(@RequestBody @Valid BizBusinessOrderInfo businessOrder, BindingResult bindingResult) { diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java index 7e79008..1fc1f9c 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/BizUpdateController.java @@ -4,6 +4,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.CertificateUpdate; +import com.casic.missiles.dto.equipment.LimitInstructionUpdate; import com.casic.missiles.model.plan.OrderReceive; import com.casic.missiles.model.plan.SampleStatueUpdate; import com.casic.missiles.service.equipment.IEquipmentInfoService; @@ -55,4 +56,11 @@ return ReturnUtil.success(); } + @ApiOperation("更新限用说明") + @PostMapping("/limitInstructionUpdate") + public ReturnDTO updateLimitInstruction(@RequestBody LimitInstructionUpdate updateForm) { + equipmentInfoService.updateLimitInstruction(updateForm.getEquipmentId(), updateForm.getLimitInstruction()); + return ReturnUtil.success(); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java index c26f678..c8c3063 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/plan/InspectionController.java @@ -1,5 +1,6 @@ package com.casic.missiles.controller.plan; +import cn.hutool.core.lang.Assert; import com.casic.missiles.controller.CommonApprovalController; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; @@ -7,6 +8,9 @@ import com.casic.missiles.dto.plan.InspectionQueryForm; import com.casic.missiles.dto.plan.PlanForm; import com.casic.missiles.dto.plan.PlanQueryForm; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.business.BizBusinessOrderInfo; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; import com.casic.missiles.model.plan.InspectionApproval; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.service.plan.IInspectionApprovalService; @@ -15,8 +19,11 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + @RestController @RequestMapping("/inspection") @Slf4j @@ -46,4 +53,10 @@ return ReturnUtil.success(info); } + @ApiOperation("设备检查") + @PostMapping("/check") + public ReturnDTO orderChcek(@RequestBody InspectionApprovalForm approvalForm) { + return ReturnUtil.success(service.checkApproval(approvalForm)); + } + } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java index 50173ef..bbf23b9 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemDeptController.java @@ -8,13 +8,16 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.response.SuccessResponseData; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; @@ -38,9 +41,22 @@ return ReturnUtil.success(systemDeptService.getUserCompany()); } + @ApiOperation("获取所属部门") + @GetMapping("/userDeptList") + public ReturnDTO getCompanyId(Long companyId) { + return ReturnUtil.success(systemDeptService.getUserDeptList(companyId)); + } + @ApiOperation("获取所在单位列表") @GetMapping("/companyList") public ReturnDTO> companyList() { return ReturnUtil.success(systemDeptService.getAllCompanyList()); } + + @ApiOperation("组织树查询接口") + @GetMapping({"/deptTree"}) + @ResponseBody + public SuccessResponseData tree(@ApiParam("父节点ID") String pid) { + return new SuccessResponseData(systemDeptService.treeByDept(pid)); + } } diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java new file mode 100644 index 0000000..73d02ec --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemLocationController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.service.system.ISystemLocationService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "安装位置管理") +@RestController +@RequestMapping("/system/location") +@RequiredArgsConstructor +public class SystemLocationController extends BaseController { + + private final ISystemLocationService locationService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemLocation systemLocation){ + locationService.add(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemLocation systemLocation){ + locationService.update(systemLocation); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemLocation systemLocation){ + locationService.delete(systemLocation); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId,Long positionId, String installLocation){ + Page page = PageFactory.defaultPage(); + page = locationService.listPage(page,searchId,positionId, installLocation); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,Long positionId, String installLocation){ + List list = locationService.list(searchId,positionId, installLocation); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java new file mode 100644 index 0000000..d64634a --- /dev/null +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/system/SystemPositionController.java @@ -0,0 +1,66 @@ +package com.casic.missiles.controller.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.service.system.ISystemPositionService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 前端控制器 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Api(tags = "岗位管理") +@RestController +@RequestMapping("/system/position") +@RequiredArgsConstructor +public class SystemPositionController extends BaseController { + + private final ISystemPositionService positionService; + + @PostMapping("add") + public ReturnDTO add(@RequestBody SystemPosition systemPosition){ + positionService.add(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("update") + public ReturnDTO update(@RequestBody SystemPosition systemPosition){ + positionService.update(systemPosition); + return ReturnUtil.success(); + } + + @PostMapping("delete") + public ReturnDTO delete(@RequestBody SystemPosition systemPosition){ + positionService.delete(systemPosition); + return ReturnUtil.success(); + } + + @GetMapping("listPage") + public ReturnDTO> listPage(Long searchId, String positionName){ + Page page = PageFactory.defaultPage(); + page = positionService.listPage(page,searchId,positionName); + return ReturnUtil.success(super.packForBT(page)); + } + + @GetMapping("list") + public ReturnDTO> list(Long searchId,String positionName){ + List list = positionService.list(searchId,positionName); + return ReturnUtil.success(list); + } + + + +} diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml index 84ca460..352950c 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml @@ -36,6 +36,8 @@ template: calibration: "现场检定审批报告" environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml index ce49c66..2ddef45 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-prod.yml @@ -1,30 +1,44 @@ server: - port: 8082 + port: 5901 + servlet: + context-path: /beqpt # context-path: /callcenter/api ################### spring配置 ################### spring: datasource: - url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://27.99.50.209:11336/casic_metering_xichang?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true username: root - password: Casic203 - initial-size: 2 - min-idle: 1 - jms: - pub-sub-domain: true - # session: - # store-type: redis + password: Admin!123 redis: - host: 127.0.0.1 + host: 27.99.50.209 port: 6379 - password: + database: 1 + serializer: org.springframework.data.redis.serializer.StringRedisSerializer + redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer + session: + store-type: redis -#flowable数据源和多数据源配置 casic: - kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + sysUrl: /sys + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/v2/api-docs,/v2/api-docs-ext,/doc.html,/websocket/**,/webjars/**,/swagger-ui.html,/swagger-resources + db: + init: + enable: false #图片下载本地地址 file: - uploadPath: /tmp/ + uploadPath: /run/media/root/D/casic/tmp/ + dir: /run/media/root/D/casic/tmp/ + meter: + standardEquipment: #标准装置 + remindDay: 30 #到期提醒,提前天数 + delayDay: 30 #到期提醒-删除,提醒推迟天数 + template: + calibration: "现场检定审批报告" + environmental: "现场环境记录" + role: + operator: user # 操作手 logging: level.root: info diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml index c888087..040124a 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application-test.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application-test.yml @@ -4,7 +4,7 @@ spring: datasource: # driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3307/casic_metering_xichang_prod?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true username: root password: root redis: diff --git a/casic-metering-eqpt-api/src/main/resources/config/application.yml b/casic-metering-eqpt-api/src/main/resources/config/application.yml index 6f0359b..2ba3290 100644 --- a/casic-metering-eqpt-api/src/main/resources/config/application.yml +++ b/casic-metering-eqpt-api/src/main/resources/config/application.yml @@ -3,7 +3,7 @@ ########################################################## spring: profiles: - active: dev + active: test servlet: multipart: max-file-size: 200MB @@ -68,13 +68,13 @@ job: admin: # xxl-job后台管理界面的地址 -# addresses: - addresses: http://111.198.10.15:21605/xxl-job-admin + addresses: +# addresses: http://111.198.10.15:21605/xxl-job-admin executor: # 此执行器的名称 - appname: casic-metering-job + appname: casic-metering-xc-eqpt-job # 此执行器的ip、端口,每个节点对应自己的ip,端口用于任务执行的通信 - ip: 127.0.0.1 + ip: 192.168.20.33 port: 9999 # 此执行器的日志存放路径 logpath: logs/xxl-job/casic-metering-job @@ -122,7 +122,7 @@ #作者 author: zhangyingjie #待生成对象表名 - table-name: eqpt_remind_relation + table-name: eqpt_equipment_modify_log prefix: eqpt_ diff --git a/casic-metering-job/pom.xml b/casic-metering-job/pom.xml index 3e12111..cbee0fb 100644 --- a/casic-metering-job/pom.xml +++ b/casic-metering-job/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -14,12 +14,12 @@ com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7 com.github.oshi @@ -61,7 +61,7 @@ com.casic casic-metering-service - 1.1.1.1 + 1.2.0.7 compile diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java index 72514d8..f704dc9 100644 --- a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentExpireJobHandler.java @@ -45,11 +45,11 @@ if(EquipmentStatusTypeEnum.DELAY.equals(equipmentInfo.getUsageStatus())){ QueryWrapper statusQueryWrapper = new QueryWrapper<>(); statusQueryWrapper.eq("equipment_id",equipmentInfo.getId()); - statusQueryWrapper.eq("", StatusApprovalTypeEnum.DELAY); + statusQueryWrapper.eq("approval_type", StatusApprovalTypeEnum.DELAY); statusQueryWrapper.orderByDesc("create_time"); statusQueryWrapper.last("limit 1"); EquipmentStatusApproval statusApproval = statusApprovalService.getOne(statusQueryWrapper); - if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getDelayTime().after(new Date())){ + if(ObjectUtil.isNotEmpty(statusApproval) && statusApproval.getApprovalTime().after(new Date())){ continue; } } diff --git a/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java new file mode 100644 index 0000000..f3aa066 --- /dev/null +++ b/casic-metering-job/src/main/java/com/casic/missiles/job/handler/EquipmentStatusApprovalJobHandler.java @@ -0,0 +1,48 @@ +package com.casic.missiles.job.handler; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.enums.ApprovalStatusEnum; +import com.casic.missiles.model.status.EquipmentStatusApproval; +import com.casic.missiles.service.status.IEquipmentStatusApprovalService; +import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +@RequiredArgsConstructor +public class EquipmentStatusApprovalJobHandler { + + private final IEquipmentStatusApprovalService statusApprovalService; + + @XxlJob("equipmentStatusApprovalJobHandler") + public void equipmentStatusApprovalJobHandler(){ + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + Date startTime = calendar.getTime(); + + calendar.add(Calendar.DATE,1); + Date endTime = calendar.getTime(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.ge("approval_time",startTime); + queryWrapper.lt("approval_time",endTime); + List list = statusApprovalService.list(queryWrapper); + for (EquipmentStatusApproval approval : list) { + statusApprovalService.updateStatusAndSaveLog(approval); + XxlJobHelper.log(String.format("update equipment %s status",approval.getEquipmentNo())); + } + } + +} diff --git a/casic-metering-model/pom.xml b/casic-metering-model/pom.xml index d995bca..1aced97 100644 --- a/casic-metering-model/pom.xml +++ b/casic-metering-model/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 7b3c7a2..29a820a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -18,11 +18,15 @@ */ // 系统前缀 String DICT_PREFIX = "eqpt"; + + String EQUIPMENT_TYPE = DICT_PREFIX + "DeviceCategory"; //受检设备使用状态 String EQUIPMENT_USAGE_STATUS = DICT_PREFIX + "DeviceUseStatus"; //受检设备重要等级 String EQUIPMENT_LEVEL = DICT_PREFIX + "DeviceLevel"; + String EQUIPMENT_QUALITY = DICT_PREFIX + "DeviceQuality"; + String EQUIPMENT_CATEGORY = DICT_PREFIX + "DeviceType"; // 设备申请类型 String EQUIPMENT_APPROVAL_TYPE = DICT_PREFIX + "EquipmentApprovalType"; @@ -30,6 +34,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + + String EQUIPMENT_REMIND_CHECK_STATUS = DICT_PREFIX + "remindCheckStatus"; // 设备在用信息 String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java new file mode 100644 index 0000000..032e2d4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderCheckDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.business; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderCheckDTO { + + private String orderNo; + private String manufactureNo; + + private String equipmentName; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java index bdf1531..67899b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListRequest.java @@ -1,9 +1,15 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @Description: * @Author: wangpeng @@ -18,12 +24,30 @@ @ApiModelProperty(value = "委托方名称", dataType = "String") private String customerName; + @ApiModelProperty("使用部门(单个)") + private Long deptId; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty(value = "送检人", dataType = "String") private String deliverer; @ApiModelProperty(value = "创建人名字", dataType = "String") private String createUserName; + /** + * 检定(校准)单位(固定值) + */ + @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") + private String measureCompany; + + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "接收状态(包括接收相关状态和检测完成状态)", dataType = "String") + private String receiveStatus; + @ApiModelProperty(value = "创建开始时间", dataType = "String") private String createStartTime; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java index 3e4c232..f17b7a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/business/OrderListResponse.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.business; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; @@ -30,6 +31,15 @@ private String customerName; /** + * 返回创建人的部门 + */ + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; + + /** * 检定(校准)单位(固定值) */ @ApiModelProperty(value = "溯源单位(检定(校准)单位)", dataType = "String") @@ -52,4 +62,8 @@ @ApiModelProperty(value = "创建时间", dataType = "String") private String createTime; + + @ApiModelProperty(value = "计划送检时间", dataType = "String") + private String requireOverTime; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java index 694e48b..aefff4a 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentApprovalForm.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.baomidou.mybatisplus.annotation.TableField; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentTechnicalTarget; @@ -13,6 +14,8 @@ @Data public class EquipmentApprovalForm extends EquipmentInfoApproval { + @ApiModelProperty("规格型号说明书") + private String instructionsFile; @ApiModelProperty("技术指标列表") private List technicalTargetList; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java index 83b45ac..08ba19e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateDTO.java @@ -1,5 +1,7 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -82,4 +84,21 @@ @ApiModelProperty("计量标识") private String meterIdentify; + + @ApiModelProperty(value = "型号规格") + private String model; + @ApiModelProperty(value = "出厂编号") + private String manufactureNo; + + @ApiModelProperty(value = "所在单位id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + private String companyName; + + @ApiModelProperty(value = "使用部门id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + private String deptName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java index 6284acf..f313257 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentCertificateQueryForm.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class EquipmentCertificateQueryForm extends BaseQueryForm { @@ -29,4 +31,30 @@ @ApiModelProperty("证书有效期结束时间") private String certificateValidEnd; + + @ApiModelProperty("型号规格") + private String model; + + @ApiModelProperty("出厂编号") + private String manufactureNo; + + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") + private List deptIds; + + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") + private String usePosition; + + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java new file mode 100644 index 0000000..cdad130 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentGroupQueryForm.java @@ -0,0 +1,32 @@ +package com.casic.missiles.dto.equipment; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.casic.missiles.model.equipment.EquipmentGroupInfo; +import com.casic.missiles.model.equipment.EquipmentGroupRelation; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class EquipmentGroupQueryForm { + + @ApiModelProperty("所在单位id") + private Long companyId; + + @ApiModelProperty("使用部门id") + private Long deptId; + + @ApiModelProperty(value = "分系统id") + private Long subSystemId; + + @ApiModelProperty("岗位ID") + private Long positionId; + + @ApiModelProperty("分组名称") + private String groupName; + + @ApiModelProperty("创建人id") + private String createUserId; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 84c4267..1e7b53b 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -93,7 +93,7 @@ /** * 设备分类(字典code) */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") +// @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; /** @@ -138,11 +138,14 @@ */ @ExcelProperty(value = "使用岗位") private String usePosition; + private String usePositionId; /** * 负责人 */ @ExcelProperty("负责人") private String directorName; + private String directorId; + @ExcelProperty("RFID标签绑定") private String rfid; /** @@ -151,10 +154,19 @@ @ExcelProperty("在用信息") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") private String useSign; + + + private Long installLocationId; + + /** + * 安装位置(选择) + */ + @ExcelProperty("安装位置") + private String installLocation; /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置") + @ExcelProperty("详细位置") private String installLocationExt; /** * 备注(扩展) @@ -162,23 +174,14 @@ @ExcelProperty(value = "备注",index = 27) private String remarkExt; -// @ExcelProperty("测量范围") -// private String measureRange; -// -// /** -// * 不确定度或允许误差极限或准确度等级 -// */ -// @ExcelProperty("技术指标") -// private String uncertainty; -// -// /** -// * 依据的技术文件 -// */ -// @ExcelProperty("依据的技术文件") -// private String basedDocuments; - @ExcelIgnore private Long modelId; + @ExcelIgnore + private String checkDuplication; + + @ExcelProperty + private String equipmentType; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java new file mode 100644 index 0000000..9682122 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDuplicationResult.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.equipment; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class EquipmentImportDuplicationResult { + + private List hasExist; + private List tableDuplication; + private List unDuplicationResult; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java index f6448c6..c814444 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentInfoForm.java @@ -12,6 +12,9 @@ @Setter public class EquipmentInfoForm extends EquipmentInfo{ + @ApiModelProperty("规格型号说明书") + private String instructionsFile; + @ApiModelProperty("组别信息") @TableField(exist = false) private List groupInfos; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java new file mode 100644 index 0000000..deb399c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelImportDTO.java @@ -0,0 +1,52 @@ +package com.casic.missiles.dto.equipment; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +@Getter +@Setter +public class EquipmentModelImportDTO { + + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE, needValid = true, message = "设备类型不合法") + private String equipmentType; + /** + * 设备名称 + */ + @ExcelProperty("设备名称") + private String equipmentName; + /** + * 型号规格 + */ + @ExcelProperty("规格型号") + private String model; + + @ExcelProperty("辅助字段") + private String helpInstruction; + + @ExcelProperty("设备分类") + private String category; + + @ExcelProperty("检定周期") + private String checkCycle; + + @ExcelProperty("计量站是否可检") + private String inspectable; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("测量范围") + private String measureRange; + + @ExcelProperty("不确定度或允许误差或准确度等级") + private String uncertainty; + + @ExcelIgnore + private String checkDuplication; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java index bcec504..7803273 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentModelQueryForm.java @@ -10,6 +10,9 @@ @Setter public class EquipmentModelQueryForm { + @ApiModelProperty("设备类型") + private String equipmentType; + @ApiModelProperty("设备名称") private String equipmentName; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java index 03fc0f1..fc2acc8 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentQueryForm.java @@ -32,12 +32,21 @@ @ApiModelProperty("所在单位") private Long companyId; - @ApiModelProperty("使用部门") + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门(列表)") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + @ApiModelProperty("负责人") private String directorName; @@ -50,6 +59,9 @@ @ApiModelProperty("安装位置") private String installLocation; + @ApiModelProperty("分组id") + private Long groupId; + @ApiModelProperty("参试任务id") private Long taskId; @@ -75,4 +87,5 @@ @ApiModelProperty("使用状态列表[状态维护选择设备时用]") private List usageStatusList; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java index 43016e2..5773c4e 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindList.java @@ -50,4 +50,11 @@ @ApiModelProperty("备注") @ExcelIgnore private String remark; + + @ApiModelProperty("检定状态") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_REMIND_CHECK_STATUS) + private String checkStatus; + + @ApiModelProperty("检定状态名称") + private String checkStatusName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java index 663cd38..6a6f602 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentRemindQueryForm.java @@ -22,21 +22,46 @@ @ApiModelProperty("规格型号") private String model; + @ApiModelProperty("生产厂家") + private String manufacturer; + @ApiModelProperty("出厂编号") private String manufactureNo; @ApiModelProperty("设备类型(1受检设备;2特种设备)") private String equipmentType; + @ApiModelProperty("所在单位") + private Long companyId; + + @ApiModelProperty("使用部门(单个)") + private Long deptId; + @ApiModelProperty("使用部门") private List deptIds; + @ApiModelProperty("使用岗位id") + private String usePositionId; + + @ApiModelProperty("使用岗位") private String usePosition; + @ApiModelProperty("负责人ID") + private Long directorId; + + @ApiModelProperty("负责人") + private String directorName; + @ApiModelProperty("使用状态") private String usageStatus; + @ApiModelProperty("使用状态列表") + private List usageStatusList; + + @ApiModelProperty("在用信息") + private String useSign; + @ApiModelProperty("证书有效期开始时间") private String certificateValidStart; @@ -52,4 +77,12 @@ @ApiModelProperty("参试任务结束时间") private String tastEndTime; + @ApiModelProperty("检定去向") + private String checkDestination; + + @ApiModelProperty("检定状态") + private String checkStatus; + + + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java new file mode 100644 index 0000000..e217254 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/LimitInstructionUpdate.java @@ -0,0 +1,19 @@ +package com.casic.missiles.dto.equipment; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Getter +@Setter +public class LimitInstructionUpdate { + + @ApiModelProperty("受检设备id") + private Long equipmentId; + + @ApiModelProperty("限用说明") + private String limitInstruction; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java index 827a8f1..dcec8a9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalLogResponse.java @@ -98,6 +98,8 @@ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("会签/或签(1/2)") + private Integer countersignOrSign; @Data @Builder @@ -113,6 +115,11 @@ */ @ApiModelProperty("意见内容") private String comment; + + public FlowCommentDto(String type, String comment) { + this.type = type; + this.comment = comment; + } } } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java index c396bd7..2b92460 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/NoticeListRequest.java @@ -42,4 +42,10 @@ @ApiModelProperty(hidden = true) private Long userId; + + @ApiModelProperty(hidden = true) + private String userCompanyName; + + @ApiModelProperty(hidden = true) + private String topCompanyName; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java index 068ffb6..381fa37 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BizBusinessOrderSampleRelation.java @@ -56,6 +56,14 @@ @TableField("sample_model") private String sampleModel; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String sampleManufacturer; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String sampleManufactureNo; + /** * 交接单id,避免重复交接(可为空) */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java index 30b5af3..b6afd18 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupInfo.java @@ -73,5 +73,52 @@ @TableField("remark") private String remark; + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField(exist = false) + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField(exist = false) + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id") + @TableField(exist = false) + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java index 36575f6..b4f78b9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentGroupRelation.java @@ -1,5 +1,6 @@ package com.casic.missiles.model.equipment; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import java.io.Serializable; import java.util.Date; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; @@ -55,12 +58,35 @@ @ApiModelProperty("型号规格") @TableField(exist = false) private String model; + + @ApiModelProperty("出厂编号") + @TableField(exist = false) + private String manufactureNo; + @ApiModelProperty("生产厂家") + @TableField(exist = false) + private String manufacturer; + + /** + * 出厂编号 + */ + @ApiModelProperty("负责人") @TableField(exist = false) private String directorName; @ApiModelProperty("计量标识") @TableField(exist = false) private String meterIdentify; + + @ApiModelProperty("计量标识名称") + @TableField(exist = false) + private String meterIdentifyName; + + @ApiModelProperty("使用状态(字典code)") + @TableField(exist = false) + private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; @ApiModelProperty("证书有效期") @TableField(exist = false) private Date certificateValid; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java index 21294cf..a8392ff 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfo.java @@ -44,14 +44,14 @@ private static final long serialVersionUID = 1L; - @ApiModelProperty("主键") + @ApiModelProperty(value = "主键") @TableId("id") private Long id; /** * 设备编号 */ - @ApiModelProperty("设备编号") + @ApiModelProperty(value = "设备编号",notes = "统一编号") @TableField("equipment_no") @ExcelProperty(value = "统一编号",index = 0) private String equipmentNo; @@ -59,7 +59,7 @@ /** * 设备名称 */ - @ApiModelProperty("设备名称") + @ApiModelProperty(value = "设备名称",notes = "设备名称") @TableField("equipment_name") @ExcelProperty(value = "设备名称",index = 1) private String equipmentName; @@ -67,14 +67,18 @@ /** * 设备类型(1受检设备;2特种设备) */ - @ApiModelProperty("设备类型(1受检设备;2特种设备)") + @ApiModelProperty(value = "设备类型(1受检设备;2特种设备)",notes = "设备类型code") @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) private String equipmentType; + @TableField(exist = false) + private String equipmentTypeName; + /** * 使用状态(字典code) */ - @ApiModelProperty("使用状态(字典code)") + @ApiModelProperty(value = "使用状态(字典code)",notes = "使用状态code") @TableField("usage_status") @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; @@ -87,28 +91,32 @@ /** * 等级(字典code) */ - @ApiModelProperty("等级(字典code)") + @ApiModelProperty(value = "等级(字典code)",notes = "重要等级code") @TableField("level") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL) private String level; + @TableField(exist = false) + private String levelName; + /** * 生产国家 */ - @ApiModelProperty("生产国家") + @ApiModelProperty(value = "生产国家",notes = "生产国家") @TableField("product_country") private String productCountry; /** * 生产厂家 */ - @ApiModelProperty("生产厂家") + @ApiModelProperty(value = "生产厂家",notes = "生产厂家") @TableField("manufacturer") private String manufacturer; /** * 出厂编号 */ - @ApiModelProperty("出厂编号") + @ApiModelProperty(value = "出厂编号",notes = "出厂编号") @TableField("manufacture_no") @ExcelProperty(value = "出厂编号",index = 3) private String manufactureNo; @@ -116,28 +124,28 @@ /** * 生产日期 */ - @ApiModelProperty("生产日期") + @ApiModelProperty(value = "生产日期",notes = "生产日期") @TableField("product_date") private Date productDate; /** * 单价(万元) */ - @ApiModelProperty("单价(万元)") + @ApiModelProperty(value = "单价(万元)",notes = "设备单价(万元)") @TableField("unit_price") private BigDecimal unitPrice; /** * 购进日期 */ - @ApiModelProperty("购进日期") + @ApiModelProperty(value = "购进日期",notes = "购进日期") @TableField("purchase_date") private Date purchaseDate; /** * 型号规格 */ - @ApiModelProperty("型号规格") + @ApiModelProperty(value = "型号规格",notes = "型号规格") @TableField("model") @ExcelProperty(value = "型号规格",index = 2) private String model; @@ -145,14 +153,18 @@ /** * 质量状况 */ - @ApiModelProperty("质量状况") + @ApiModelProperty(value = "质量状况",notes = "质量状况code") @TableField("quality_condition") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_QUALITY) private String qualityCondition; + @TableField(exist = false) + private String qualityConditionName; + /** * 所在单位id */ - @ApiModelProperty("所在单位id") + @ApiModelProperty(value = "所在单位id",notes = "所在单位id") @TableField("company_id") private Long companyId; @@ -163,7 +175,7 @@ /** * 使用部门id */ - @ApiModelProperty("使用部门id") + @ApiModelProperty(value = "使用部门id",notes = "使用部门id") @TableField("dept_id") private Long deptId; @@ -174,14 +186,17 @@ /** * 设备分类(字典code) */ - @ApiModelProperty("设备分类(字典code)") + @ApiModelProperty(value = "设备分类(字典code)",notes = "设备分类code") @TableField("category") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY) private String category; + @TableField(exist = false) + private String categoryName; /** * 检定周期(月) */ - @ApiModelProperty("检定周期(月)") + @ApiModelProperty(value = "检定周期(月)",notes = "检定周期(月)") @TableField("check_cycle") @ExcelProperty(value = "检定周期(月)",index = 6) @ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, horizontalAlignment = HorizontalAlignmentEnum.LEFT) @@ -190,7 +205,7 @@ /** * 备注 */ - @ApiModelProperty("备注") + @ApiModelProperty(value = "备注",notes = "备注") @TableField("remark") @ExcelProperty(value = "备注",index = 9) private String remark; @@ -198,28 +213,28 @@ /** * 说明书(minio存储文件名)(多个用,拼接) */ - @ApiModelProperty("说明书(minio存储文件名)(多个用,拼接)") + @ApiModelProperty(value = "说明书(minio存储文件名)(多个用,拼接)") @TableField("instructions_file") private String instructionsFile; /** * 检定机构 */ - @ApiModelProperty("检定机构") + @ApiModelProperty(value = "检定机构",notes = "检定(校准)机构") @TableField("check_organization") private String checkOrganization; /** * 检定日期 */ - @ApiModelProperty("检定日期") + @ApiModelProperty(value = "检定日期",notes = "检定(校准)日期") @TableField("check_date") private Date checkDate; /** * 证书有效期 */ - @ApiModelProperty("证书有效期") + @ApiModelProperty(value = "证书有效期",notes = "证书有效期") @TableField("certificate_valid") @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class) private Date certificateValid; @@ -227,7 +242,7 @@ /** * 计量标识 */ - @ApiModelProperty("计量标识") + @ApiModelProperty(value = "计量标识",notes = "计量标识code") @TableField("meter_identify") @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY) private String meterIdentify; @@ -237,17 +252,28 @@ @ExcelProperty(value = "计量标识",index = 5) private String meterIdentifyName; + @ApiModelProperty(value = "使用岗位id",notes = "使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @ApiModelProperty("使用岗位") - @TableField("use_position") + @TableField(exist = false) @ExcelProperty(value = "使用岗位",index = 4) private String usePosition; /** * 负责人 */ + @ApiModelProperty(value = "负责人id",notes = "负责人id") + @TableField("director_id") + private String directorId; + + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -255,17 +281,25 @@ /** * RFID标签绑定 */ - @ApiModelProperty("RFID标签绑定") + @ApiModelProperty(value = "RFID标签绑定",notes = "RFID标签绑定") @TableField("RFID") private String rfid; /** * 在用信息(字典code) */ - @ApiModelProperty("在用信息(字典code)") + @ApiModelProperty(value = "在用信息(字典code)",notes = "在用信息code") @TableField("use_sign") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE) private String useSign; + @TableField(exist = false) + private String useSignName; + + @ApiModelProperty(value = "安装位置id",notes = "安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -276,7 +310,7 @@ /** * 安装位置(自定义编写) */ - @ApiModelProperty("安装位置(自定义编写)") + @ApiModelProperty(value = "安装位置(自定义编写)",notes = "详细位置") @TableField("install_location_ext") private String installLocationExt; @@ -290,7 +324,7 @@ /** * 备注(扩展) */ - @ApiModelProperty("备注(扩展)") + @ApiModelProperty(value = "备注(扩展)",notes = "备注") @TableField("remark_ext") private String remarkExt; @@ -327,14 +361,25 @@ @TableLogic(value = "0",delval = "1") private Integer isDel; - @ApiModelProperty("规格型号id") + @ApiModelProperty(value = "规格型号id",notes = "规格型号id") @TableField("model_id") private Long modelId; - @ApiModelProperty("辅助字段") + @ApiModelProperty(value = "辅助字段",notes = "辅助字段") @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty(value = "检定去向",notes = "检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty(value = "限用说明",notes = "限用说明") + @TableField("limit_instruction") + private String limitInstruction; + + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java index 13eeef8..060aa33 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentInfoApproval.java @@ -101,8 +101,13 @@ */ @ApiModelProperty("使用状态(字典code)") @TableField("usage_status") + @DictCodeField(message = "使用状态", cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS) private String usageStatus; + @ApiModelProperty("使用状态名称") + @TableField(exist = false) + private String usageStatusName; + /** * 等级(字典code) */ @@ -253,6 +258,10 @@ @TableField(exist = false) private String meterIdentifyName; + @ApiModelProperty("使用岗位id") + @TableField("use_position_id") + private String usePositionId; + /** * 使用岗位 */ @@ -263,6 +272,12 @@ /** * 负责人 */ + @ApiModelProperty("负责人id") + @TableField("director_id") + private String directorId; + /** + * 负责人 + */ @ApiModelProperty("负责人") @TableField("director_name") private String directorName; @@ -281,6 +296,10 @@ @TableField("use_sign") private String useSign; + @ApiModelProperty("安装位置id") + @TableField("install_location_id") + private Long installLocationId; + /** * 安装位置(选择) */ @@ -347,6 +366,14 @@ @TableField("help_instruction") private String helpInstruction; + @ApiModelProperty("检定去向") + @TableField("check_destination") + private String checkDestination; + + @ApiModelProperty("限用说明") + @TableField("limit_instruction") + private String limitInstruction; + @ApiModelProperty("任务id") @TableField(exist = false) private String taskId; @@ -363,4 +390,7 @@ @TableField(exist = false) private List taskInfos; + @ApiModelProperty("分组名称") + @TableField(exist = false) + private String groupNames; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java index 471e8c8..d4b20e9 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelInfo.java @@ -48,10 +48,15 @@ /** * 型号规格编号 */ - @ApiModelProperty("型号规格编号") - @TableField("model_no") - @ExcelProperty("型号规格编号") - private String modelNo; + @ApiModelProperty("设备类型") + @TableField("equipment_type") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_TYPE) + private String equipmentType; + + @ApiModelProperty("设备类型名称") + @TableField(exist = false) + @ExcelProperty("设备类型") + private String equipmentTypeName; /** * 设备名称 @@ -113,6 +118,10 @@ @ExcelProperty("备注") private String remark; + @ApiModelProperty("计量站是否可检(1西昌可检;2海口可检,多个用,拼接)") + @TableField("inspectable") + private String inspectable; + /** * 创建人id */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java index bd6f907..c47b2fc 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModelTechnicalTarget.java @@ -48,7 +48,6 @@ */ @ApiModelProperty("不确定度或允许误差极限或准确度等级") @TableField("uncertainty") - private String uncertainty; /** diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java new file mode 100644 index 0000000..a19c0a6 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/EquipmentModifyLog.java @@ -0,0 +1,72 @@ +package com.casic.missiles.model.equipment; + +import com.alibaba.fastjson.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import com.casic.missiles.core.base.json.DateDeserializer; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检设备-设备台账-设备变更记录 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Getter +@Setter +@TableName("eqpt_equipment_modify_log") +public class EquipmentModifyLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ApiModelProperty("主键") + @TableId("id") + private Long id; + + /** + * 设备id + */ + @ApiModelProperty("设备id") + @TableField("equipment_id") + private Long equipmentId; + + /** + * 变更内容 + */ + @ApiModelProperty("变更内容") + @TableField("content") + private String content; + + /** + * 变更人 + */ + @ApiModelProperty("变更人id") + @TableField("operate_user_id") + private Long operateUserId; + + @ApiModelProperty("变更人姓名") + @TableField(exist = false) + private String operateUserName; + /** + * 变更时间 + */ + @ApiModelProperty("变更时间") + @TableField("operate_time") + private Date operateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java index 989211a..e8bc431 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/status/EquipmentStatusLog.java @@ -66,5 +66,9 @@ @ApiModelProperty("原因") private String reason; + @ApiModelProperty("状态维护申请id") + @TableField("status_approval_id") + private Long statusApprovalId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java new file mode 100644 index 0000000..a78c41a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemLocation.java @@ -0,0 +1,115 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-安装位置管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_location") +public class SystemLocation implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位id + */ + @ApiModelProperty("岗位ID") + @TableField("position_id") + private Long positionId; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField(exist = false) + private String positionName; + + /** + * 安装位置 + */ + @ApiModelProperty("安装位置") + @TableField("install_location") + private String installLocation; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java new file mode 100644 index 0000000..ae21c3f --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/SystemPosition.java @@ -0,0 +1,105 @@ +package com.casic.missiles.model.system; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 受检系统-系统管理-岗位管理 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Getter +@Setter +@TableName("eqpt_system_position") +public class SystemPosition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId("id") + private Long id; + + /** + * 所在单位id + */ + @ApiModelProperty("所在单位id") + @TableField("company_id") + private Long companyId; + + @ApiModelProperty("所在单位名称") + @TableField(exist = false) + private String companyName; + + /** + * 使用部门id + */ + @ApiModelProperty("使用部门id") + @TableField("dept_id") + private Long deptId; + + @ApiModelProperty("使用部门名称") + @TableField(exist = false) + private String deptName; + + /** + * 分系统id + */ + @ApiModelProperty(value = "分系统id(新增/编辑时传)",required = true) + @TableField("sub_system_id") + private Long subSystemId; + + @ApiModelProperty("分系统名称") + @TableField(exist = false) + private String subSystemName; + + /** + * 使用岗位名称 + */ + @ApiModelProperty("岗位名称") + @TableField("position_name") + private String positionName; + + @ApiModelProperty("备注") + @TableField("remarks") + private String remarks; + + /** + * 创建人员 + */ + @TableField("create_user") + private Long createUser; + + /** + * 更新人员 + */ + @TableField("update_user") + private Long updateUser; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; + + +} diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index ec09616..57508a3 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -5,7 +5,7 @@ casic-metering-eqpt-xichang com.casic - 1.1.1.1 + 1.2.0.7 4.0.0 @@ -16,19 +16,19 @@ com.casic casic-metering-dao - 1.1.1.1 + 1.2.0.7
com.casic casic-metering-model - 1.1.1.1 + 1.2.0.7 com.casic casic-metering-common - 1.1.1.1 + 1.2.0.7 org.springframework.boot diff --git a/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java new file mode 100644 index 0000000..b28717e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/annotation/EquipmentLog.java @@ -0,0 +1,20 @@ +package com.casic.missiles.annotation; + + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface EquipmentLog { + + /** + * 设备ID + */ + String key(); + + /** + * 变更描述 + */ + String value() default ""; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java new file mode 100644 index 0000000..5327988 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/aop/EquipmentLogAop.java @@ -0,0 +1,148 @@ +package com.casic.missiles.aop; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.annotation.EquipmentLog; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.casic.missiles.utils.CasicBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.standard.SpelExpression; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import java.beans.Expression; +import java.lang.reflect.Method; +import java.util.Date; + +@Aspect +@Component +@EnableAsync +@Slf4j +public class EquipmentLogAop { + + @Autowired + private IEquipmentInfoService equipmentInfoService; + @Autowired + private IEquipmentModifyLogService modifyLogService; + @Autowired + private AbstractAuthService authService; + + + /** + * 用于SpEL表达式解析. + */ + private final SpelExpressionParser parser = new SpelExpressionParser(); + /** + * 用于获取方法参数定义名字. + */ + private final DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); + + private Long equipmentId; + private EquipmentInfo oldInfo; + + + /** + * 注解的位置 + */ + @Pointcut("@annotation(com.casic.missiles.annotation.EquipmentLog)") + public void logPointCut() {} + + @Before(value="logPointCut()") + public void before(JoinPoint joinPoint) throws Exception { + equipmentId = getEquipmentId(joinPoint); + if(ObjectUtil.isNotEmpty(equipmentId)){ + oldInfo = equipmentInfoService.getById(equipmentId); + }else { + oldInfo = null; + } + } + + private Long getEquipmentId(JoinPoint joinPoint) throws Exception { + //1.1获取目标对象对应的字节码对象 + Class targetCls= joinPoint.getTarget().getClass(); + //1.2获取目标方法对象 + //1.2.1 获取方法签名信息从而获取方法名和参数类型 + Signature signature= joinPoint.getSignature(); + //1.2.1.1将方法签名强转成MethodSignature类型,方便调用 + MethodSignature ms= (MethodSignature)signature; + //1.2.2通过字节码对象以及方法签名获取目标方法对象 + Method targetMethod=targetCls.getDeclaredMethod(ms.getName(),ms.getParameterTypes()); + //1.3获取目标方法对象上注解中的属性值 + //1.2.3 获取方法上的自定义requiredLog注解 + EquipmentLog equipmentLog=targetMethod.getAnnotation(EquipmentLog.class); + String val = generateKeyBySpEL(equipmentLog.key(), joinPoint); + return ObjectUtil.isNotEmpty(val) ? Long.valueOf(val) : null; + } + + // @Async + @After(value="logPointCut()") + public void after(JoinPoint joinPoint){ + if(ObjectUtil.isNotEmpty(equipmentId) && ObjectUtil.isNotEmpty(oldInfo)){ + EquipmentInfo newInfo = equipmentInfoService.getById(equipmentId); + log.info("equipment info:{}, {},{}",equipmentId,JSONObject.toJSON(oldInfo),JSONObject.toJSON(newInfo)); + JSONArray res = CasicBeanUtil.fieldCompareDetail(oldInfo,newInfo,null); + if(ObjectUtil.isNotEmpty(res) && res.size() > 0){ + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < res.size(); i++) { + JSONObject item = res.getJSONObject(i); + String filedName = equipmentInfoService.getFieldName(item.getString("field")); + if(StrUtil.isNotBlank(filedName)){ + String oldValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("oldVal")); + String newValue = equipmentInfoService.getFieldValue(item.getString("field"),item.getString("newVal")); + String msg = String.format("字段名=%s,变更前=%s,变更后=%s;",filedName,oldValue,newValue); + stringBuilder.append(msg); + } + } + log.info("equipment modify: {}",stringBuilder); + saveLog(equipmentId,stringBuilder.toString()); + } + } + } + + private void saveLog(Long equipmentId,String content){ + if(StrUtil.isNotBlank(content)){ + EquipmentModifyLog modifyLog = new EquipmentModifyLog(); + modifyLog.setEquipmentId(equipmentId); + modifyLog.setContent(content); + modifyLog.setOperateTime(new Date()); + AuthUser authUser = authService.getLoginUser(); + if(ObjectUtil.isNotEmpty(authUser)){ + modifyLog.setOperateUserId(authUser.getId()); + } + modifyLogService.save(modifyLog); + } + } + + public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) throws Exception { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); + SpelExpression expression = (SpelExpression) parser.parseExpression(spELString); + EvaluationContext context = new StandardEvaluationContext(); + Object[] args = joinPoint.getArgs(); + for (int i = 0; i < args.length; i++) { + context.setVariable(paramNames[i], args[i]); + } + return expression.getValue(context).toString(); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java index 074d0a1..761223f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBizBusinessOrderInfoService.java @@ -8,6 +8,8 @@ import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.model.business.BizBusinessOrderInfo; +import java.util.List; + /** *

* 计量检定业务-任务单 服务类 @@ -28,5 +30,9 @@ ReturnDTO updateStatusById(Long id, String alreadyReceived); + String checkOrder(BizBusinessOrderInfo businessOrder); + + String checkSamples(List sampleIds, Long orderId); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java index d5417d4..633af3f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentGroupInfoService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import java.util.List; @@ -23,7 +24,7 @@ void deleteGroup(Long groupId); - Page listPage(Page page, String groupName); + Page listPage(Page page, EquipmentGroupQueryForm queryForm); EquipmentGroupForm detail(Long groupId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java index 06d0cbd..222ebdd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoApprovalService.java @@ -3,6 +3,7 @@ import com.casic.missiles.dto.equipment.EquipmentApprovalLog; import com.casic.missiles.dto.equipment.EquipmentQueryForm; import com.casic.missiles.dto.equipment.EquipmentApprovalForm; +import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.casic.missiles.service.ICommonApprovalService; @@ -19,6 +20,14 @@ */ public interface IEquipmentInfoApprovalService extends ICommonApprovalService { + boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm); + + boolean checkRfidRepeat(String rfid, Long equipmentId); + + String checkLocation(Long installLocationId, String usageStatus, Long equipmentId); + + void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId); + Long saveOrUpdateApproval(EquipmentApprovalForm approvalForm); EquipmentApprovalForm approvalInfoDetail(Long approvalId); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java index acec159..d3c9f3a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentInfoService.java @@ -29,6 +29,8 @@ */ public interface IEquipmentInfoService extends IService { + + Page listPage(Page page, EquipmentQueryForm queryForm); List list(EquipmentQueryForm queryForm); @@ -41,7 +43,7 @@ ReturnDTO> equipmentLabelReadList(Set strSet); - void infoImport(MultipartFile file, String equipmentType) throws IOException; + EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException; List allCertificate(Long equipmentId, String equipmentType); @@ -52,6 +54,9 @@ void updateCertificateInfo(Long equipmentId, String checkOrganization, Date checkDate, Date certificateValid, String meterIdentify); + void updateLimitInstruction(Long equipmentId, String limitInstruction); + + void removeCertificateInfo(Long equipmentId, Long certificateId); Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) @@ -67,4 +72,10 @@ (Page page, EquipmentCertificateQueryForm queryForm); void bindTask(EquipmentTaskBindForm bindForm); + + String getFieldName(String field); + String getFieldValue(String field, String fieldValue); + + Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java index 19afa01..fef1e36 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModelInfoService.java @@ -1,11 +1,15 @@ package com.casic.missiles.service.equipment; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.model.equipment.EquipmentModelInfo; import com.baomidou.mybatisplus.extension.service.IService; import liquibase.pro.packaged.S; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; /** @@ -28,8 +32,12 @@ List listScope(EquipmentModelQueryForm queryForm); - List listEquipmentName(); + List listEquipmentName(String equipmentType); - List listModel(String equipmentName); + List listModel(String equipmentType, String equipmentName); + + String defaultCheckDestination(Long modelId,Long companyId); + + EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java new file mode 100644 index 0000000..dda4137 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/equipment/IEquipmentModifyLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.service.equipment; + +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +public interface IEquipmentModifyLogService extends IService { + + List listByEquipment(Long equipmentId); + + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java index 53ba53b..4a5d3b1 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/BaseApprovalServiceImpl.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; @@ -74,7 +75,7 @@ @Override public ReturnDTO processSubmit(String formId, Long id) { - return this.processSubmit(formId,id,null); + return this.processSubmit(formId, id, null); } @Transactional @@ -268,7 +269,6 @@ } /** - * * @param processId * @return */ @@ -409,21 +409,29 @@ flowTask.setComment(ApprovalLogResponse.FlowCommentDto.builder().type(comment.getType()).comment(comment.getFullMessage()).build()); } }); -// 覆盖已有的root,因为驳回会再产生一个发起人任务 -// int flag = 0; -// ApprovalLogResponse oldValue = null; -// if(histIns.getActivityId().contains("root")){ -// for (ApprovalLogResponse his : hisFlowList) { -// if(his.getTaskId().contains("root")){ -// oldValue = his; -// flag = 1; -// break; -// } -// } -// } -// if(flag > 0){ -// hisFlowList.remove(oldValue); -// } + //判断会签or或签 + BpmnModel bpmnModel = repositoryService.getBpmnModel(histIns.getProcessDefinitionId()); + if (!histIns.getActivityName().contains("发起人")) { + Task task = taskService.createTaskQuery().taskId(histIns.getTaskId()).singleResult(); + if (Objects.nonNull(task)) { + FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); + List outgoingFlows = flowNode.getOutgoingFlows(); + for (SequenceFlow outgoingFlow : outgoingFlows) { + FlowElement targetFlowElement = outgoingFlow.getSourceFlowElement(); + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + if (Objects.nonNull(userTask) && Objects.nonNull(userTask.getLoopCharacteristics())) { + //或签 + if ("${nrOfCompletedInstances/nrOfInstances > 0}".equals(userTask.getLoopCharacteristics().getCompletionCondition())) { + flowTask.setCountersignOrSign(2);//或签 + } else { + flowTask.setCountersignOrSign(1);//会签 + } + } + } + } + } + } hisFlowList.add(flowTask); } } @@ -494,6 +502,10 @@ } + if (resultList.size() == 1 && resultList.get(0).size() == 1) { + resultList.get(0).get(0).setComment(new ApprovalLogResponse.FlowCommentDto("0", "自动通过")); + } + return resultList; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java index 187b0ee..1b01363 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/CommonApprovalServiceImpl.java @@ -141,8 +141,9 @@ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id",approvalId); updateWrapper.set("approval_status",approvalStatus); - boolean updateRes = this.update(updateWrapper); - return updateRes ? ReturnUtil.success() : ReturnUtil.failed("请求失败"); + updateWrapper.ne("approval_status",ApprovalStatusEnum.PASSED); + this.update(updateWrapper); + return ReturnUtil.success(); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java index d24f084..70d0301 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/BoardMessageServiceImpl.java @@ -103,7 +103,9 @@ Dept company = systemDeptService.getUserCompany(); queryWrapper.eq("notify_dept_id",company.getId()); Long userId = permissionContext.getAuthService().getLoginUser().getId(); - List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName()); + List allDeptList = permissionContext.getDeptService().list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List list = this.baseMapper.noticeMessagePage(page,queryWrapper,userId,company.getId(),company.getFullName(),top.getFullName()); list.forEach(i->i.setNotifyUserId(userId)); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java index 759cb30..5f41d98 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java @@ -22,10 +22,12 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.mapper.board.NoticeBoardMapper; import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.INoticeBoardService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.plan.IPlanEquipmentRelationService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; @@ -49,13 +51,16 @@ private final IRemindConfigService remindConfigService; private final NoticeBoardMapper noticeBoardMapper; + private final ISystemDeptService systemDeptService; private final List InCheckSampleStatus = Arrays.asList(CheckCompletionEnum.IN_CHECK,CheckCompletionEnum.UNCHECK,CheckCompletionEnum.CHECKED); @Override public List planBizStatistics(String deptName) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List statisticsLists = this.noticeBoardMapper.statisticsInfoList(dataScope,EQUIPMENT_TYPE_NORMAL,null, deptName, +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); + + List deptIds = getScopeOrCurrentDeptIds(); + List statisticsLists = this.noticeBoardMapper.statisticsInfoList(null,EQUIPMENT_TYPE_NORMAL,deptIds, deptName, SampleStatusEnum.getSampleStatusByCompletion(CheckCompletionEnum.CHECKED)); Map> deptMaps = statisticsLists.stream().collect(Collectors.groupingBy(EquipmentStatisticsList::getDeptId)); @@ -69,10 +74,10 @@ statisticsDTO.setDeptName(subList.get(0).getDeptName()); statisticsDTO.setTotal((long) subList.size()); - statisticsDTO.setMonthToExpire(subList.stream().filter(i->i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); - statisticsDTO.setExpired(subList.stream().filter(i->i.getCertificateValid().before(new Date())).count()); + statisticsDTO.setMonthToExpire(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date()) && DateUtil.month(new Date()) == DateUtil.month(i.getCertificateValid())).count()); + statisticsDTO.setExpired(subList.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count()); statisticsDTO.setInCheck(subList.stream().filter(i-> StrUtil.isNotEmpty(i.getLatestSampleStatus()) && SampleStatusEnum.getSampleStatusByCompletion(InCheckSampleStatus).contains(i.getLatestSampleStatus())).count()); - statisticsDTO.setYearToCheck(subList.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(subList.stream().filter(i-> ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(subList.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); Optional planFinishOpt = planFinishDTOList.stream().filter(i->deptId.equals(i.getDeptId())).findFirst(); @@ -136,15 +141,23 @@ } private List getScopeOrCurrentDeptIds(){ - if(ShiroKit.isAdmin()){ - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - return dataScope.getDeptIds(); - } - }else { - return getCurrentDeptIds(); +// if(ShiroKit.isAdmin()){ +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { +// return dataScope.getDeptIds(); +// } +// }else { +// return getCurrentDeptIds(); +// } +// return null; + + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return null; + return userDeptIds; } @@ -229,8 +242,8 @@ // 待检设备态势(未检定、检定中、已检完) List statistic = new ArrayList<>(); - statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->i.getCertificateValid().before(new Date())).count())); - statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->i.getCertificateValid().after(new Date())).count())); + statistic.add(new EquipmentCommonAggr("已超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().before(new Date())).count())); + statistic.add(new EquipmentCommonAggr("未超期", (int) list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && i.getCertificateValid().after(new Date())).count())); res.setStatistic(statistic); //受检单位/负责人排行榜;单位/部门列表 @@ -393,13 +406,16 @@ private List getDeptGroupList(Map> deptGroupMap) { List deptGroupList = new ArrayList<>(); for (String key : deptGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setDeptName(key.split(";;;")[3]); - item.setCount(deptGroupMap.get(key).size()); - deptGroupList.add(item); + if(key.split(";;;").length >= 4){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setDeptName(key.split(";;;")[3]); + item.setCount(deptGroupMap.get(key).size()); + deptGroupList.add(item); + } + } return deptGroupList; } @@ -408,12 +424,14 @@ private List getCompanyGroupList(Map> companyGroupMap) { List companyGroupList = new ArrayList<>(); for (String key : companyGroupMap.keySet()) { - EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); - item.setEquipmentName(key.split(";;;")[0]); - item.setModel(key.split(";;;")[1]); - item.setCompanyName(key.split(";;;")[2]); - item.setCount(companyGroupMap.get(key).size()); - companyGroupList.add(item); + if(key.split(";;;").length >= 3){ + EquipmentMultiAggr.EquipmentSimpleList item = new EquipmentMultiAggr.EquipmentSimpleList(); + item.setEquipmentName(key.split(";;;")[0]); + item.setModel("null".equals(key.split(";;;")[1]) ? "" : key.split(";;;")[1]); + item.setCompanyName(key.split(";;;")[2]); + item.setCount(companyGroupMap.get(key).size()); + companyGroupList.add(item); + } } return companyGroupList; } @@ -422,10 +440,19 @@ public EquipmentMultiAggr inUseMultiStatistic(List deptIds) { EquipmentMultiAggr res = new EquipmentMultiAggr(); EquipmentQueryForm queryForm = new EquipmentQueryForm(); - if(CollUtil.isEmpty(deptIds)){ - deptIds = getScopeOrCurrentDeptIds(); - } - queryForm.setDeptIds(deptIds); +// if(CollUtil.isEmpty(deptIds)){ +// deptIds = getScopeOrCurrentDeptIds(); +// queryForm.setDeptIds(deptIds); +// }else { +// List subDeptIds = new ArrayList<>(); +// List allDeptList = permissionContext.getDeptService().list(null); +// for (Long deptId : deptIds) { +// subDeptIds.add(deptId); +// subDeptIds.addAll(allDeptList.stream().filter(i->ObjectUtil.isNotEmpty(i.getPids())&&i.getPids().contains(String.valueOf(deptId))).map(Dept::getId).distinct().collect(Collectors.toList())); +// } +// queryForm.setDeptIds(subDeptIds); +// } + queryForm.setUsageStatus(EquipmentStatusTypeEnum.UNSEAL); List list = equipmentInfoService.list(queryForm); if(CollUtil.isEmpty(list)){ @@ -450,7 +477,7 @@ CheckStatisticsDTO statisticsDTO = new CheckStatisticsDTO(); - statisticsDTO.setYearToCheck(list.stream().filter(i-> DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); + statisticsDTO.setYearToCheck(list.stream().filter(i->ObjectUtil.isNotEmpty(i.getCertificateValid()) && DateUtil.year(new Date()) == DateUtil.year(i.getCertificateValid())).count()); statisticsDTO.setYearChecked(list.stream().mapToLong(i->Long.valueOf(i.getYearChecked())).sum()); return statisticsDTO; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java index dac1790..edd9d5b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/business/BizBusinessOrderInfoServiceImpl.java @@ -1,6 +1,8 @@ package com.casic.missiles.service.impl.business; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -8,6 +10,7 @@ import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.OrderBackRequest; +import com.casic.missiles.dto.business.OrderCheckDTO; import com.casic.missiles.dto.business.OrderListRequest; import com.casic.missiles.dto.business.OrderListResponse; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -20,14 +23,18 @@ import com.casic.missiles.mapper.business.BusinessOrderListResponseMapper; import com.casic.missiles.model.business.BizBusinessOrderInfo; import com.casic.missiles.model.business.BizBusinessOrderSampleRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.business.IBizBusinessOrderSampleRelationService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -47,21 +54,38 @@ private final IBizBusinessOrderSampleRelationService sampleRelationService; private final BizBusinessOrderSampleRelationMapper sampleRelationMapper; private final AbstractPermissionContext permissionContext; + private final ISystemDeptService systemDeptService; @Override public Page orderListPage(Page page, OrderListRequest request) throws Exception { QueryWrapper wrapper = listParamWrapperBuilder(request); // 查找本单位提交的 - Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); - List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); - wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); +// Long deptId = permissionContext.getAuthService().getLoginUser().getDeptId(); +// List parentDeptIds = permissionContext.getDeptService().getParentListById(deptId); +// wrapper.and(i->i.eq("customer_id",deptId).or().in(CollUtil.isNotEmpty(parentDeptIds),"customer_id",parentDeptIds)); - Page resultPage = orderListResponseMapper.selectPage(page, wrapper); - for (OrderListResponse customerAdviceInfo : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); } - return resultPage; + if(ObjectUtil.isNotEmpty(userDeptIds)){ + wrapper.in("dept_id",userDeptIds); + }else { + // userDeptIds为空 查询结果应为空 + return page; + } + + List list = orderListResponseMapper.listPage(page, wrapper); + page.setRecords(list); + for (OrderListResponse customerAdviceInfo : page.getRecords()) { + DictCodeUtils.convertDictCodeToName(customerAdviceInfo); + customerAdviceInfo.setDeptName(permissionContext.getDeptService().getDeptName(customerAdviceInfo.getDeptId())); + } + return page; } @Override @@ -70,6 +94,8 @@ DictCodeUtils.convertDictCodeToName(orderInfo); // todo 交接单编号列表,另需补充根据交接单编号打印pdf的接口 QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("*","(select manufacturer from eqpt_equipment_info e where e.id = sample_id) as sampleManufacturer" + ,"(select manufacture_no from eqpt_equipment_info e where e.id = sample_id) as sampleManufactureNo"); wrapper.eq("order_id", orderInfo.getId()); List orderSampleList = sampleRelationMapper.selectList(wrapper); for (BizBusinessOrderSampleRelation bizBusinessOrderSampleRelation : orderSampleList) { @@ -154,7 +180,45 @@ "{0} <= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateStartTime().split(" ")[0]); wrapper.apply(StringUtils.isNotBlank(request.getCreateEndTime()), "{0} >= DATE_FORMAT(create_time,'%Y-%m-%d')", request.getCreateEndTime().split(" ")[0]); + + wrapper.eq(ObjectUtil.isNotEmpty(request.getDeptId()),"dept_id",request.getDeptId()); + wrapper.like(StrUtil.isNotEmpty(request.getMeasureCompany()),"measure_company",request.getMeasureCompany()); + wrapper.eq(StrUtil.isNotEmpty(request.getReceiveStatus()),"receive_status",request.getReceiveStatus()); + + String positionSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.use_position_id = %s)",request.getUsePositionId()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getUsePositionId()),positionSql); + + String manufactureNoSql = String.format("(select id from eqpt_equipment_info e where e.id in (select sample_id from biz_business_order_sample_relation r where r.order_id = t.id) and e.manufacture_no like '%%%s%%')",request.getManufactureNo()); + wrapper.exists(ObjectUtil.isNotEmpty(request.getManufactureNo()),manufactureNoSql); wrapper.orderByDesc("create_time"); return wrapper; } + + @Override + public String checkOrder(BizBusinessOrderInfo businessOrder) { + List sampleRelations = businessOrder.getCustomerSampleInfoList(); + if(CollUtil.isNotEmpty(sampleRelations)){ + List sampleIds = sampleRelations.stream().map(BizBusinessOrderSampleRelation::getSampleId).distinct().collect(Collectors.toList()); + return checkSamples(sampleIds,businessOrder.getId()); + } + + return null; + } + + @Override + public String checkSamples(List sampleIds, Long orderId) { + List checkRes = this.baseMapper.checkSamples(sampleIds, orderId); + if(CollUtil.isNotEmpty(checkRes)){ + Map> map = checkRes.stream().collect(Collectors.groupingBy(OrderCheckDTO::getManufactureNo)); + StringBuilder stringBuilder = new StringBuilder(); + for (String manufactureNo : map.keySet()) { + List subRes = map.get(manufactureNo); + String orderNos = StrUtil.join(",",subRes.stream().map(OrderCheckDTO::getOrderNo).distinct().collect(Collectors.toList())); + stringBuilder.append(String.format("编号为%s的%s设备已在任务单%s中,",manufactureNo,subRes.get(0).getEquipmentName(),orderNos)); + } + stringBuilder.append("请确认是否继续提交"); + return stringBuilder.toString(); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java index 4a89b12..5608317 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentGroupInfoServiceImpl.java @@ -2,11 +2,16 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.constants.MeterDictCode; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.dto.equipment.EquipmentGroupForm; +import com.casic.missiles.dto.equipment.EquipmentGroupQueryForm; import com.casic.missiles.mapper.equipment.EquipmentGroupInfoMapper; import com.casic.missiles.model.equipment.EquipmentGroupInfo; import com.casic.missiles.model.equipment.EquipmentGroupRelation; @@ -31,6 +36,8 @@ public class EquipmentGroupInfoServiceImpl extends ServiceImpl implements IEquipmentGroupInfoService { private final IEquipmentGroupRelationService groupRelationService; + private final AbstractDeptService deptService; + private final AbstractDictService dictService; @Override @Transactional @@ -62,14 +69,25 @@ groupRelationService.deleteByGroupId(groupId); } - // todo datascope @Override - public Page listPage(Page page, String groupName) { + public Page listPage(Page page, EquipmentGroupQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StrUtil.isNotEmpty(groupName)) { - queryWrapper.like("binary group_name", groupName); - } - return this.page(page, queryWrapper); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"p.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"p.dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getSubSystemId()),"p.sub_system_id",queryForm.getSubSystemId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getPositionId()),"g.position_id",queryForm.getPositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getGroupName()), "binary g.group_name", queryForm.getGroupName()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCreateUserId()),"g.create_user_id",queryForm.getCreateUserId()); + List list = this.baseMapper.listPage(page, queryWrapper); + list.forEach(this::wrapper); + page.setRecords(list); + return page; + } + + private void wrapper(EquipmentGroupInfo info) { + info.setCompanyName(deptService.getDeptName(info.getCompanyId())); + info.setDeptName(deptService.getDeptName(info.getDeptId())); + info.setSubSystemName(deptService.getDeptName(info.getSubSystemId())); } @Override @@ -80,6 +98,11 @@ groupForm.setGroupInfo(groupInfo); List relations = groupRelationService.listByGroup(groupId); + relations.forEach(i->{ + i.setMeterIdentifyName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY,i.getMeterIdentify())); + i.setUsageStatusName(dictService.getDictNameByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS,i.getUsageStatus())); + + }); groupForm.setEquipmentList(relations); return groupForm; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index 0a5a5fe..4916f29 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -5,9 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.equipment.EquipmentApprovalLog; @@ -16,6 +19,7 @@ import com.casic.missiles.dto.flowable.ApprovalSubmitRequest; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.equipment.EquipmentInfo; import com.casic.missiles.model.equipment.EquipmentInfoApproval; @@ -81,6 +85,30 @@ @Autowired private IEquipmentTaskRelationService taskRelationService; + @Autowired + private IEquipmentModelInfoService modelInfoService; + + @Override + public boolean updateEquipmentInfo(EquipmentApprovalForm approvalForm) { + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } + String checkLoc = checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + attachmentService.saveByEquipment(approvalForm.getEquipmentId(), approvalForm.getAttachments()); + taskRelationService.saveByEquipment(approvalForm.getEquipmentId(),approvalForm.getTaskInfos()); + if (EQUIPMENT_TYPE_SPECIAL.equals(approvalForm.getEquipmentType())) { + specialCertificateService.saveCertificateList(approvalForm.getEquipmentId(), approvalForm.getCertificateList()); + } + EquipmentInfo info = new EquipmentInfo(); + BeanUtil.copyProperties(approvalForm, info); + info.setId(approvalForm.getEquipmentId()); + saveTurnoverLog(info, null, approvalForm.getCreateUserId()); + return equipmentInfoService.updateById(info); + } @Override @Transactional @@ -91,6 +119,12 @@ if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ throw new BusinessException(500,"RFID标签已使用"); } + String checkLoc = this.checkLocation(approvalForm.getInstallLocationId(),approvalForm.getUsageStatus(),approvalForm.getEquipmentId()); + if(StrUtil.isNotEmpty(checkLoc)){ + throw new BusinessException(500,String.format("当前安装位置已存在一台在用设备,编号为%s",checkLoc)); + } + + if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -156,24 +190,40 @@ throw new BusinessException(500,"RFID标签已使用"); } String processId = approval.getProcessId(); + log.debug("==================== update status IN_APPROVED {} {}",processId,approval.getId()); + ReturnDTO res = updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); if (StrUtil.isEmpty(processId)) { + log.debug("==================== process submit {} {}",processId,approval.getId()); ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); if (!ResponseData.DEFAULT_SUCCESS_CODE.equals(submitRes.getCode())) { return submitRes; } ProcessInstance processInstance = (ProcessInstance) submitRes.getData(); - approval.setProcessId(processInstance.getProcessInstanceId()); - this.updateById(approval); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",approval.getId()); + updateWrapper.set("process_id",processInstance.getProcessInstanceId()); + this.update(updateWrapper); +// approval.setProcessId(processInstance.getProcessInstanceId()); +// this.updateById(approval); } else { baseApprovalService.resubmit(processId); } - return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); + return res; } - private boolean checkRfidRepeat(String rfid, Long equipmentId){ + @Override + public boolean checkRfidRepeat(String rfid, Long equipmentId){ return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; } + @Override + public String checkLocation(Long installLocationId, String usageStatus, Long equipmentId){ + if(ObjectUtil.isNotEmpty(installLocationId) && EquipmentStatusTypeEnum.UNSEAL.equals(usageStatus)){ + return this.baseMapper.checkLocation(installLocationId,EquipmentStatusTypeEnum.UNSEAL,equipmentId); + } + return null; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -188,14 +238,16 @@ public void simpleUpdate(EquipmentApprovalForm approvalForm, EquipmentInfo info) { EquipmentInfo oldObj = SerializationUtils.clone(info); CasicBeanUtil.copySpecifyProperties(approvalForm, info, "checkOrganization", "checkDate", - "certificateValid", "meterIdentify", "usePosition", "directorName", "rfid", - "useSign", "installLocation", "installLocationExt", "testTask", "remarkExt"); + "certificateValid", "meterIdentify", "usePositionId","usePosition","directorId", "directorName", "rfid", + "useSign","installLocationId", "installLocation", "installLocationExt", "testTask", "remarkExt", + "checkDestination","limitInstruction"); saveTurnoverLog(info, oldObj, approvalForm.getCreateUserId()); equipmentInfoService.updateById(info); } - private void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { + @Override + public void saveTurnoverLog(EquipmentInfo newObj, EquipmentInfo oldObj, Long createUserId) { if(ObjectUtil.isEmpty(oldObj)){ oldObj = equipmentInfoService.getById(newObj.getId()); } @@ -235,6 +287,7 @@ public void finishApproval(Long approvalId) { EquipmentInfoApproval approvalInfo = this.getById(approvalId); approvalInfo.setApprovalStatus(ApprovalStatusEnum.PASSED); + log.debug("==================== update status PASSED {} {}",approvalInfo.getProcessId(),approvalInfo.getId()); this.updateById(approvalInfo); if (ObjectUtil.isEmpty(approvalInfo)) { return; @@ -268,6 +321,8 @@ info.setGroupInfos(groupInfoService.selectByEquipment(info.getEquipmentId())); info.setCertificateList(equipmentInfoService.allCertificate(info.getEquipmentId(),info.getEquipmentType())); info.setTaskInfos(taskInfoService.listByEquipment(info.getEquipmentId())); + info.setInstructionsFile(modelInfoService.getById(info.getModelId()).getInstructionsFile()); + } return info; } @@ -278,7 +333,7 @@ super.warpper(approval); approval.setCompanyName(permissionContext.getDeptService().getDeptName(approval.getCompanyId())); approval.setDeptName(permissionContext.getDeptService().getDeptName(approval.getDeptId())); - //DictCodeUtils.convertDictCodeToName(approval); + DictCodeUtils.convertDictCodeToName(approval); } catch (Exception e) { throw new RuntimeException(e); @@ -287,6 +342,18 @@ } @Override + public List list(Wrapper queryWrapper) { + return this.baseMapper.selectList(queryWrapper); + } + + @Override + public > E page(E page, Wrapper queryWrapper) { + List list = this.baseMapper.selectListPage((Page) page, (QueryWrapper) queryWrapper); + page.setRecords(list); + return page; + } + + @Override public QueryWrapper commonQuery(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); @@ -294,6 +361,7 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); @@ -301,12 +369,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_approval_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index bbade89..d64203e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.annotation.EquipmentLog; import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; @@ -27,10 +28,7 @@ import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.PrefixCodeEnum; -import com.casic.missiles.enums.equipment.EquipmentCertificateTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentStatusTypeEnum; -import com.casic.missiles.enums.equipment.EquipmentTypeEnum; -import com.casic.missiles.enums.equipment.StatusApprovalTypeEnum; +import com.casic.missiles.enums.equipment.*; import com.casic.missiles.enums.plan.CheckCompletionEnum; import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; @@ -38,21 +36,33 @@ import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.model.system.SystemPosition; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; +import com.casic.missiles.modular.system.model.User; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusLogService; import com.casic.missiles.service.subcontract.ISubcontractCertificateService; import com.casic.missiles.service.system.IRemindConfigService; +import com.casic.missiles.service.system.ISystemDeptService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.casic.missiles.service.system.ISystemPositionService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import com.casic.missiles.utils.SpringContextUtil; +import io.swagger.annotations.ApiModelProperty; import liquibase.pro.packaged.S; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.P; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +74,7 @@ import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; +import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_SPECIAL; /** *

@@ -91,9 +102,16 @@ private final IEquipmentModelInfoService modelInfoService; private final EquipmentInfoApprovalMapper infoApprovalMapper; + private final ISystemDeptService systemDeptService; + private final ISystemPositionService positionService; + private final ISystemLocationService locationService; + private ISubcontractCertificateService subcontractCertificateService; + @Value("${casic.role.operator: user}") + private String operatorRoleTip; + @Autowired @@ -101,12 +119,24 @@ this.subcontractCertificateService = subcontractCertificateService; } + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean saveOrUpdate(EquipmentInfo entity) { + return super.saveOrUpdate(entity); + } + + @EquipmentLog(key = "#entity.id") + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public boolean updateById(EquipmentInfo entity) { + return super.updateById(entity); + } + @Override public Page listPage(Page page, EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectListPage(page, dataScope, queryWrapper); + List list = this.baseMapper.selectListPage(page, null, queryWrapper); list.forEach(this::warpEquipmentInfo); page.setRecords(list); return page; @@ -135,26 +165,14 @@ @Override public List list(EquipmentQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectList(dataScope, queryWrapper); + List list = this.baseMapper.selectList(null, queryWrapper); list.forEach(this::warpEquipmentInfo); return list; } @Override public List groupByName(EquipmentQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { - List dataScopeDeptIds = dataScope.getDeptIds(); - if (ObjectUtil.isNull(queryForm.getDeptIds())) { - queryForm.setDeptIds(new ArrayList<>()); - } - queryForm.getDeptIds().addAll(dataScopeDeptIds); - } - QueryWrapper queryWrapper = commonQuery(queryForm); - queryWrapper.groupBy("equipment_name"); queryWrapper.select("equipment_name as 'equipmentName',count(*) as 'count'"); List> resMap = this.listMaps(queryWrapper); @@ -167,10 +185,30 @@ if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); @@ -179,12 +217,18 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"model",queryForm.getModel()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"director_id",queryForm.getDirectorId()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"director_name",queryForm.getDirectorName()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()),"use_sign",queryForm.getUseSign()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getInstallLocation()),"CONCAT(install_location,install_location_ext)",queryForm.getInstallLocation()); + if(ObjectUtil.isNotEmpty(queryForm.getGroupId())){ + String existSql = String.format("(select id from eqpt_equipment_group_relation where group_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getGroupId()); + queryWrapper.exists(existSql); + } + if(ObjectUtil.isNotEmpty(queryForm.getTaskId())){ - String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info.id)",queryForm.getTaskId()); + String existSql = String.format("(select id from eqpt_equipment_task_relation where task_id = %d and equipment_id = eqpt_equipment_info_view.id)",queryForm.getTaskId()); queryWrapper.exists(existSql); } queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()),"check_organization",queryForm.getCheckOrganization()); @@ -213,6 +257,8 @@ infoForm.setCertificateList(allCertificate(equipmentId, equipmentInfo.getEquipmentType())); infoForm.setTaskInfos(taskInfoService.listByEquipment(equipmentId)); + infoForm.setInstructionsFile(modelInfoService.getById(equipmentInfo.getModelId()).getInstructionsFile()); + } return infoForm; } @@ -263,7 +309,7 @@ } @Override - public void infoImport(MultipartFile file, String equipmentType) throws IOException { + public EquipmentImportDuplicationResult infoImport(MultipartFile file, String equipmentType) throws IOException { InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 //注册自定义监听器,字段校验可以在监听器内实现 @@ -273,7 +319,11 @@ .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); //开始读Excel,返回一个List集合,继续后续入库操作 validImport(list); - saveImport(list, equipmentType); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult(), equipmentType); + } + return checkResult; } private void validImport(List list) { @@ -282,6 +332,11 @@ Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); List modelInfoList = modelInfoService.list(); + QueryWrapper userQueryWrapper = new QueryWrapper<>(); + userQueryWrapper.eq("STATUS","1").eq("DEL_FLAG","0"); + List userList = permissionContext.getUserService().list(null); + List locationList = locationService.list(); + List positionList = positionService.list(); Map> dictTotalMap = new HashMap<>(); dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); @@ -303,6 +358,7 @@ } } String validMsg = "第%d行数据校验失败:%s"; + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); // 设备名称、规格型号、辅助字段 @@ -317,12 +373,14 @@ if(CollUtil.isEmpty(itemModels)){ throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); }else if(itemModels.size() == 1){ - if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction()) && + !importDTO.getHelpInstruction().equals(itemModels.get(0).getHelpInstruction())){ throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); } importDTO.setModelId(itemModels.get(0).getId()); importDTO.setCategory(itemModels.get(0).getCategory()); importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); }else { if (StrUtil.isBlank(importDTO.getHelpInstruction())) { @@ -333,12 +391,15 @@ importDTO.setModelId(modelOpt.get().getId()); importDTO.setCategory(modelOpt.get().getCategory()); importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + importDTO.setEquipmentType(itemModels.get(0).getEquipmentType()); } else { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); } } } + + // 字典值 Field[] fields = importDTO.getClass().getDeclaredFields(); for (Field field : fields) { @@ -392,6 +453,38 @@ throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + // 使用岗位 + if(ObjectUtil.isNotEmpty(importDTO.getUsePosition())){ + Optional positionOpt = positionList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getPositionName().trim().equals(importDTO.getUsePosition().trim())).findFirst(); + if(positionOpt.isPresent()){ + importDTO.setUsePositionId(positionOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "使用岗位不存在")); + } + } + // 负责人 todo 根据部门过滤? + if(ObjectUtil.isNotEmpty(importDTO.getDirectorName())){ + Optional userOpt = userList.stream().filter(p->p.getName().trim().equals(importDTO.getDirectorName().trim())).findFirst(); + if(userOpt.isPresent()){ + importDTO.setDirectorId(userOpt.get().getId().toString()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "负责人不存在")); + } + } + // 安装位置 + if(ObjectUtil.isNotEmpty(importDTO.getInstallLocation())){ + Optional locationOpt = locationList.stream().filter(p->p.getCompanyId().equals(importDTO.getCompanyId()) + && p.getDeptId().equals(importDTO.getDeptId()) + && p.getInstallLocation().trim().equals(importDTO.getInstallLocation().trim())).findFirst(); + if(locationOpt.isPresent()){ + importDTO.setInstallLocationId(locationOpt.get().getId()); + }else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "安装位置不存在")); + } + } + // rfid if(StrUtil.isNotBlank(importDTO.getRfid())){ if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ @@ -404,6 +497,45 @@ } } + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段、出厂编号、生产厂家 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction(),i.getManufactureNo(),i.getManufacturer())); + }); + List equipmentInfos = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentImportDTO importDTO = importList.get(i); + if(equipmentInfos.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .filter(e-> (StrUtil.isBlank(e.getManufactureNo())&&StrUtil.isBlank(importDTO.getManufactureNo())) + ||(StrUtil.isNotBlank(e.getManufactureNo())&&e.getManufactureNo().equals(importDTO.getManufactureNo()))) + .filter(e-> (StrUtil.isBlank(e.getManufacturer())&&StrUtil.isBlank(importDTO.getManufacturer())) + ||(StrUtil.isNotBlank(e.getManufacturer())&&e.getManufacturer().equals(importDTO.getManufacturer()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } @Transactional public void saveImport(List list, String equipmentType) { Long maxNo = this.baseMapper.selectMaxNo(equipmentType); @@ -418,13 +550,12 @@ BeanUtil.copyProperties(importDTO, equipmentInfo); equipmentInfo.setId(IdWorker.getId()); equipmentInfo.setEquipmentNo(NumberGeneratorUtil.getContactNo(prefix, maxNo + i)); - equipmentInfo.setEquipmentType(equipmentType); +// equipmentInfo.setEquipmentType(equipmentType); equipmentInfo.setCreateUserId(user.getId()); equipmentInfo.setCreateUserName(user.getName()); equipmentInfo.setCreateTime(new Date()); equipmentInfo.setUpdateTime(new Date()); equipmentInfo.setIsDel(0); - equipmentInfos.add(equipmentInfo); } @@ -438,10 +569,11 @@ @Override public void updateEquipmentStatus(Long equipmentId, String usageStatus) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", equipmentId); - updateWrapper.set("usage_status", usageStatus); - this.update(updateWrapper); + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if(ObjectUtil.isNotEmpty(equipmentInfo)){ + equipmentInfo.setUsageStatus(usageStatus); + } + this.updateById(equipmentInfo); } @Override @@ -469,19 +601,29 @@ if (StrUtil.isNotEmpty(meterIdentify)) { equipmentInfo.setMeterIdentify(meterIdentify); } - this.updateById(equipmentInfo); + //当设备证书有效期更新且未到期时,设备状态自动变更为启封 if (!EquipmentStatusTypeEnum.UNSEAL.equals(equipmentInfo.getUsageStatus()) && !EquipmentStatusTypeEnum.SCRAP.equals(equipmentInfo.getUsageStatus()) && certificateValid.after(new Date())) { - this.updateEquipmentStatus(equipmentId, EquipmentStatusTypeEnum.UNSEAL); - statusLogService.saveLog(equipmentId, StatusApprovalTypeEnum.UNSEAL, "设备证书更新"); + String usageStatus = EquipmentStatusTypeEnum.UNSEAL; + equipmentInfo.setUsageStatus(usageStatus); + statusLogService.saveLog(equipmentId, usageStatus, "设备证书更新"); } - + this.updateById(equipmentInfo); } } } + @Override + public void updateLimitInstruction(Long equipmentId, String limitInstruction) { + EquipmentInfo equipmentInfo = this.getById(equipmentId); + if (ObjectUtil.isNotEmpty(equipmentInfo)) { + equipmentInfo.setLimitInstruction(limitInstruction); + this.updateById(equipmentInfo); + } + } + public void removeCertificateInfo(Long equipmentId, Long certificateId) { EquipmentInfo equipmentInfo = this.getById(equipmentId); if (ObjectUtil.isNotEmpty(equipmentInfo)) { @@ -506,9 +648,11 @@ @Override public Page remindListPage(Page page, EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindListPage(page, dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindListPage(page, null,queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); page.setRecords(list); return page; @@ -517,9 +661,11 @@ @Override public List remindList(EquipmentRemindQueryForm queryForm) { QueryWrapper queryWrapper = remindQuery(queryForm); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - List list = this.baseMapper.selectRemindList(dataScope, queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + List list = this.baseMapper.selectRemindList(null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); list.forEach(this::warpEquipmentRemindInfo); return list; } @@ -534,9 +680,48 @@ private QueryWrapper remindQuery(EquipmentRemindQueryForm queryForm){ QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + queryWrapper.eq("0","1"); + } + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryForm.setDirectorId(authUser.getId()); + } +// else { + + +// List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); +// scopeIds.add(authUser.getDeptId()); +// if(CollUtil.isNotEmpty(queryForm.getDeptIds())){ +// scopeIds.retainAll(queryForm.getDeptIds()); +// } +// queryForm.setDeptIds(scopeIds); +// } + + + if (CollUtil.isNotEmpty(queryForm.getIds())) { queryWrapper.in("id", queryForm.getIds()); } else { + + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"dept_id",queryForm.getDeptId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"company_id",queryForm.getCompanyId()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "dept_id", queryForm.getDeptIds()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getEquipmentNo()), "equipment_no", queryForm.getEquipmentNo()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentName()), "equipment_name", queryForm.getEquipmentName()); @@ -544,24 +729,52 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()), "equipment_type", queryForm.getEquipmentType()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"manufacture_no",queryForm.getManufactureNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"use_position_id",queryForm.getUsePositionId()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUsageStatus()), "usage_status", queryForm.getUsageStatus()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getUseSign()), "use_sign", queryForm.getUseSign()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "certificate_valid", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "certificate_valid", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckDestination()),"check_destination",queryForm.getCheckDestination()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCheckStatus()),"check_status",queryForm.getCheckStatus()); + + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getUsageStatusList()),"usage_status",queryForm.getUsageStatusList()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufacturer()),"manufacturer",queryForm.getManufacturer()); queryWrapper.like(ObjectUtil.isNotEmpty(queryForm.getTaskId()),"taskIds",queryForm.getTaskId()); if (StrUtil.isNotEmpty(queryForm.getTaskStartTime()) || StrUtil.isNotEmpty(queryForm.getTastEndTime())) { queryWrapper.and(i -> { - i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) - .or() - .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); + i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTastEndTime()) + .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTaskStartTime()); + +// i.le(StrUtil.isNotEmpty(queryForm.getTaskStartTime()), "task_start_time", queryForm.getTaskStartTime()) +// .or() +// .ge(StrUtil.isNotEmpty(queryForm.getTastEndTime()), "task_end_time", queryForm.getTastEndTime()); }); } } queryWrapper.eq("is_del", 0); - queryWrapper.le("remind_valid",new Date()); + queryWrapper.and(i->i.le("remind_valid",new Date()).or().isNull("remind_valid")); return queryWrapper; } @Override + public Page orderSelectListPage(Page page, EquipmentRemindQueryForm queryForm) { + QueryWrapper queryWrapper = remindQuery(queryForm); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY, + EquipmentStatusTypeEnum.SEAL)); + queryWrapper.eq("check_status",0); //未送检设备 + List list = this.baseMapper.selectRemindListPage(page,null, queryWrapper, + SampleStatusEnum.getSampleStatusByCompletion(Arrays.asList(CheckCompletionEnum.UNCHECK,CheckCompletionEnum.IN_CHECK))); + list.forEach(this::warpEquipmentRemindInfo); + page.setRecords(list); + return page; + } + + @Override public List expireTrend(String type) { switch (type){ case "month": @@ -598,9 +811,21 @@ queryWrapper.le("certificate_valid", endTime); queryWrapper.eq("is_del",0); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("dept_id"); - return this.baseMapper.selectList(dataScope,queryWrapper); + queryWrapper.in("usage_status",Arrays.asList(EquipmentStatusTypeEnum.UNSEAL, + EquipmentStatusTypeEnum.DISABLE, + EquipmentStatusTypeEnum.DELAY)); + + // 操作手仅能看到自己负责的设备信息,其余角色查看本组织结构下所有 + AuthUser authUser = permissionContext.getAuthService().getLoginUser(); + if(authUser.getRoleTips().contains(operatorRoleTip)){ + queryWrapper.eq("director_id",authUser.getId()); + }else { + List scopeIds = permissionContext.getDeptService().getIdsByPid(authUser.getDeptId(),null); + scopeIds.add(authUser.getDeptId()); + queryWrapper.in("dept_id",scopeIds); + } + + return this.baseMapper.selectList(null,queryWrapper); } private List expireTrendByMonth(){ @@ -611,7 +836,7 @@ startCal.set(Calendar.SECOND,0); Calendar endCal = Calendar.getInstance(); - endCal.add(Calendar.MONTH,1); + endCal.add(Calendar.MONTH,3); endCal.set(Calendar.HOUR_OF_DAY,23); endCal.set(Calendar.MINUTE,59); endCal.set(Calendar.SECOND,59); @@ -634,8 +859,23 @@ @Override public Page certificateListPage(Page page, EquipmentCertificateQueryForm queryForm) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("e.dept_id"); + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有部门的;否则查当前用户所在部门的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(ObjectUtil.isNotEmpty(queryForm.getDeptIds())){ + userDeptIds.retainAll(queryForm.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(userDeptIds)){ + queryForm.setDeptIds(userDeptIds); + }else { + // userDeptIds 查询结果应为空 + return page; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateNo()), "c.certificate_report_no", queryForm.getCertificateNo()); queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCertificateName()), "c.certificate_report_name", queryForm.getCertificateName()); @@ -644,10 +884,26 @@ queryWrapper.like(StrUtil.isNotEmpty(queryForm.getCheckOrganization()), "'西昌卫星发射中心计量测试站'", queryForm.getCheckOrganization()); queryWrapper.ge(StrUtil.isNotEmpty(queryForm.getCertificateValidStart()), "c.expiration_date", queryForm.getCertificateValidStart()); queryWrapper.le(StrUtil.isNotEmpty(queryForm.getCertificateValidEnd()), "c.expiration_date", queryForm.getCertificateValidEnd()); + + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getModel()),"e.model",queryForm.getModel()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getManufactureNo()),"e.manufacture_no",queryForm.getManufactureNo()); + queryWrapper.eq("e.is_del", 0); queryWrapper.eq("c.approval_status", ApprovalStatusEnum.PASSED); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDeptId()),"e.dept_id",queryForm.getDeptId()); + queryWrapper.in(CollUtil.isNotEmpty(queryForm.getDeptIds()), "e.dept_id", queryForm.getDeptIds()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getCompanyId()),"e.company_id",queryForm.getCompanyId()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getUsePositionId()),"e.use_position_id",queryForm.getUsePositionId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getUsePosition()), "e.use_position", queryForm.getUsePosition()); + queryWrapper.eq(ObjectUtil.isNotEmpty(queryForm.getDirectorId()),"e.director_id",queryForm.getDirectorId()); + queryWrapper.like(StrUtil.isNotEmpty(queryForm.getDirectorName()),"e.director_name",queryForm.getDirectorName()); - List list = this.baseMapper.bizCertificateListPage(page, dataScope, queryWrapper); + queryWrapper.orderByDesc("c.create_time"); + List list = this.baseMapper.bizCertificateListPage(page, null, queryWrapper); + for (EquipmentCertificateDTO certificateDTO : list) { + certificateDTO.setDeptName(permissionContext.getDeptService().getDeptName(certificateDTO.getDeptId())); + certificateDTO.setCompanyName(permissionContext.getDeptService().getDeptName(certificateDTO.getCompanyId())); + } page.setRecords(list); return page; } @@ -668,4 +924,76 @@ } taskRelationService.saveBatch(relationList); } + + @Override + public String getFieldName(String fieldName) { + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + notes = notes.replace("id","").replace("code",""); + } + return notes; + } + } + } + return null; + } + + @Override + public String getFieldValue(String fieldName, String fieldValue) { + if(StrUtil.isBlank(fieldValue)){ + return fieldValue; + } + Field[] fields = EquipmentInfo.class.getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + if(fieldName.equals(field.getName())){ + if(field.isAnnotationPresent(ApiModelProperty.class)){ + ApiModelProperty apiModelProperty = field.getAnnotationsByType(ApiModelProperty.class)[0]; + String notes = apiModelProperty.notes(); + if(StrUtil.isNotEmpty(notes)){ + if(notes.contains("code")){ + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + if (StringUtils.isEmpty(dictCodeField.cacheName())) { + throw new BusinessException(500, "缓存名不能为空"); + } + AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class); + fieldValue = dictService.getDictNameByCode(dictCodeField.cacheName(), fieldValue); + } + if(notes.contains("id")){ + switch (notes){ + case "所在单位id": + case "使用部门id": + fieldValue = permissionContext.getDeptService().getDeptName(fieldValue); + break; + case "使用岗位id": + fieldValue = positionService.getNameById(Long.valueOf(fieldValue)); + break; + case "负责人id": + fieldValue = permissionContext.getUserService().getById(fieldValue).getName(); + break; + case "安装位置id": + fieldValue = locationService.getById(fieldValue).getInstallLocation(); + break; + case "规格型号id": + fieldValue = modelInfoService.getById(fieldValue).getModel(); + break; + } + } + } + + } + } + } + return fieldValue; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 9c5ce09..48c32b4 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -1,22 +1,30 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.dto.equipment.EquipmentImportDTO; +import com.casic.missiles.dto.equipment.EquipmentImportDuplicationResult; +import com.casic.missiles.dto.equipment.EquipmentModelImportDTO; import com.casic.missiles.dto.equipment.EquipmentModelQueryForm; import com.casic.missiles.enums.PrefixCodeEnum; import com.casic.missiles.exception.BusinessException; -import com.casic.missiles.model.equipment.EquipmentInfo; -import com.casic.missiles.model.equipment.EquipmentInfoApproval; -import com.casic.missiles.model.equipment.EquipmentModelInfo; +import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentModelInfoMapper; -import com.casic.missiles.model.equipment.EquipmentModelTechnicalTarget; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.equipment.IEquipmentModelInfoService; @@ -28,10 +36,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.casic.missiles.enums.equipment.EquipmentTypeEnum.EQUIPMENT_TYPE_NORMAL; @@ -52,12 +65,25 @@ private final IEquipmentInfoService equipmentInfoService; private final IEquipmentInfoApprovalService equipmentInfoApprovalService; private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; + + private final String XC_INSPECTABLE = "1"; // 西昌可检 + private final String HK_INSPECTABLE = "2"; // 海口可检 + + private final String XC_LAB = "西昌"; // 西昌可检 + private final String HK_LAB = "海口"; // 海口可检 + + private final String CHECK_DESTINATION_METER = "1"; // 检定去向:计量室 + private final String CHECK_DESTINATION_DELIVERY = "2"; // 检定去向:外送 @Override @Transactional public void add(EquipmentModelInfo modelInfo) { - Long maxNo = this.baseMapper.selectMaxNo(); - modelInfo.setModelNo(NumberGeneratorUtil.getContactNo(PrefixCodeEnum.EQUIPMENT_MODEL_PREFIX, maxNo)); + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.save(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); } @@ -65,6 +91,11 @@ @Override @Transactional public void update(EquipmentModelInfo modelInfo) { + if(StrUtil.isNotEmpty(modelInfo.getInspectable())){ + if(StrUtil.isBlank(modelInfo.getCategory())){ + throw new BusinessException(501,"计量站可检,设备分类必填"); + } + } this.updateById(modelInfo); technicalTargetService.saveByModel(modelInfo.getId(),modelInfo.getTechnicalTargetList()); equipmentInfoService.updateByModel(modelInfo); @@ -90,8 +121,6 @@ @Override public Page listScopePage(Page page, EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScopePage(null,page,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -111,8 +140,6 @@ @Override public List listScope(EquipmentModelQueryForm queryForm) { -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// dataScope.setScopeName("create_dept_id"); QueryWrapper queryWrapper = commonQuery(queryForm); List list = this.baseMapper.listScope(null,queryWrapper); List technicalTargetList = technicalTargetService.listByModelIds(list.stream().map(EquipmentModelInfo::getId).collect(Collectors.toList())); @@ -136,35 +163,193 @@ queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getHelpInstruction()),"help_instruction",queryForm.getHelpInstruction()); queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getCategory()),"category",queryForm.getCategory()); queryWrapper.in(CollUtil.isNotEmpty(queryForm.getIds()),"id",queryForm.getIds()); + queryWrapper.eq(StrUtil.isNotEmpty(queryForm.getEquipmentType()),"equipment_type",queryForm.getEquipmentType()); return queryWrapper; } @Override - public List listEquipmentName() { + public List listEquipmentName(String equipmentType) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct equipment_name as equipment_name"); - -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); + queryWrapper.orderByAsc("equipment_name"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("equipment_name").toString()).collect(Collectors.toList()); } @Override - public List listModel(String equipmentName) { + public List listModel(String equipmentType, String equipmentName) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(equipmentType),"equipment_type",equipmentType); queryWrapper.eq("equipment_name",equipmentName); -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.equals(dataScope.getScopeEnums())) { -// List dataScopeDeptIds = dataScope.getDeptIds(); -// queryWrapper.in("create_dept_id",dataScopeDeptIds); -// } queryWrapper.select("distinct model as model"); + queryWrapper.orderByAsc("model"); List> maps = this.listMaps(queryWrapper); return maps.stream().map(i->i.get("model").toString()).collect(Collectors.toList()); } + @Override + public String defaultCheckDestination(Long modelId, Long companyId) { + String defaultLab = this.baseMapper.getLabLocation(companyId); + String inspectable = this.getById(modelId).getInspectable(); + if(StrUtil.isNotEmpty(defaultLab) && StrUtil.isNotEmpty(inspectable)){ + if(inspectable.contains(XC_INSPECTABLE) && defaultLab.contains(XC_LAB)){ + return CHECK_DESTINATION_METER; + }else if(inspectable.contains(HK_INSPECTABLE) && defaultLab.contains(HK_LAB)){ + return CHECK_DESTINATION_METER; + }else { + return CHECK_DESTINATION_DELIVERY; + } + } + return null; + } + + @Override + public EquipmentImportDuplicationResult batchImport(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + List list = EasyExcel.read(inputStream) + .registerReadListener(new CommonExcelListener<>()) + .head(EquipmentModelImportDTO.class) + .sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 + .headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行 + .doReadSync(); + validImport(list); + EquipmentImportDuplicationResult checkResult = checkImportDuplication(list); + if(CollUtil.isNotEmpty(checkResult.getUnDuplicationResult())){ + saveImport(checkResult.getUnDuplicationResult()); + } + return checkResult; + } + + private void validImport(List importList){ + List equipmentTypeDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_TYPE); + List equipmentCategoryDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY); + Pattern checkCycelPattern = Pattern.compile("^[1-9]\\d*$"); // 大于0的整数 + Pattern inspectablePattern = Pattern.compile("^(1|2|1,2|2,1)$"); // 1或2或两个拼接 + String validMsg = "第%d行数据校验失败:%s"; + + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + // 设备类型 + if(StrUtil.isBlank(importDTO.getEquipmentType())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不能为空")); + }else { + if(equipmentTypeDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getEquipmentType()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备类型不合法")); + } + } + // 设备名称 + if (StrUtil.isBlank(importDTO.getEquipmentName())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); + } + // 规格型号 + if (StrUtil.isBlank(importDTO.getModel())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "规格型号不能为空")); + } + if (StrUtil.isBlank(importDTO.getHelpInstruction())){ + importDTO.setHelpInstruction("/"); + } + + // 设备分类 + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不能为空")); + }else { + if(equipmentCategoryDicts.stream().noneMatch(d->d.getCode().equals(importDTO.getCategory()))){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备分类不合法")); + } + } + + // 检定周期 + if(StrUtil.isBlank(importDTO.getCheckCycle())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不能为空")); + }else { + if(!checkCycelPattern.matcher(importDTO.getCheckCycle()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "检定周期不合法")); + } + } + + // 计量站是否可检 + if(StrUtil.isNotBlank(importDTO.getInspectable())){ + importDTO.setInspectable(importDTO.getInspectable().replace(",",",").trim()); + if(!inspectablePattern.matcher(importDTO.getInspectable()).matches()){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站是否可检不合法")); + } + if(StrUtil.isBlank(importDTO.getCategory())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "计量站可检,设备分类必填")); + } + } + } + } + + private EquipmentImportDuplicationResult checkImportDuplication(List importList){ + //根据设备名称、型号规格、辅助字段 判重; + importList.forEach(i->{ + i.setCheckDuplication(String.format("%s%s%s",i.getEquipmentName(),i.getModel(),i.getHelpInstruction())); + }); + List modelInfoList = this.list(); + + List unDuplicationResult = new ArrayList<>(); + List hasExist = new ArrayList<>(); + List tableDuplication = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + if(modelInfoList.stream() + .filter(e-> (StrUtil.isBlank(e.getEquipmentName())&&StrUtil.isBlank(importDTO.getEquipmentName())) + ||(StrUtil.isNotBlank(e.getEquipmentName())&&e.getEquipmentName().equals(importDTO.getEquipmentName()))) + .filter(e-> (StrUtil.isBlank(e.getModel())&&StrUtil.isBlank(importDTO.getModel())) + ||(StrUtil.isNotBlank(e.getModel())&&e.getModel().equals(importDTO.getModel()))) + .filter(e-> (StrUtil.isBlank(e.getHelpInstruction())&&StrUtil.isBlank(importDTO.getHelpInstruction())) + ||(StrUtil.isNotBlank(e.getHelpInstruction())&&e.getHelpInstruction().equals(importDTO.getHelpInstruction()))) + .count()>0){ + hasExist.add(i+1); + }else if(importList.stream().filter(e->e.getCheckDuplication().equals(importDTO.getCheckDuplication())).count()>1){ + tableDuplication.add(i+1); + }else { + unDuplicationResult.add(importDTO); + } + } + + EquipmentImportDuplicationResult checkResult = new EquipmentImportDuplicationResult<>(); + checkResult.setUnDuplicationResult(unDuplicationResult); + checkResult.setTableDuplication(tableDuplication); + checkResult.setHasExist(hasExist); + return checkResult; + + } + + private void saveImport(List importList){ + AuthUser user = permissionContext.getAuthService().getLoginUser(); + List modelInfoList = new ArrayList<>(); + List technicalTargetList = new ArrayList<>(); + for (int i = 0; i < importList.size(); i++) { + EquipmentModelImportDTO importDTO = importList.get(i); + EquipmentModelInfo modelInfo = new EquipmentModelInfo(); + BeanUtil.copyProperties(importDTO, modelInfo); + modelInfo.setId(IdWorker.getId()); + modelInfo.setCheckCycle(Integer.parseInt(importDTO.getCheckCycle())); + modelInfo.setCreateUserId(user.getId()); + modelInfo.setCreateDeptId(user.getDeptId()); + modelInfo.setCreateTime(new Date()); + modelInfo.setUpdateTime(new Date()); + + modelInfoList.add(modelInfo); + + if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getMeasureRange())) { + EquipmentModelTechnicalTarget technicalTarget = new EquipmentModelTechnicalTarget(); + technicalTarget.setModelId(modelInfo.getId()); + technicalTarget.setUncertainty(importDTO.getUncertainty()); + technicalTarget.setMeasureRange(importDTO.getMeasureRange()); + technicalTarget.setCreateTime(new Date()); + technicalTarget.setUpdateTime(new Date()); + technicalTargetList.add(technicalTarget); + } + + } + if (CollUtil.isNotEmpty(modelInfoList)) { + this.saveBatch(modelInfoList); + } + if(CollUtil.isNotEmpty(technicalTargetList)){ + technicalTargetService.saveBatch(technicalTargetList); + } + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java new file mode 100644 index 0000000..825a9ee --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModifyLogServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.service.impl.equipment; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.model.equipment.EquipmentModifyLog; +import com.casic.missiles.mapper.equipment.EquipmentModifyLogMapper; +import com.casic.missiles.service.equipment.IEquipmentModifyLogService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 受检设备-设备台账-设备变更记录 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-20 + */ +@Service +@RequiredArgsConstructor +public class EquipmentModifyLogServiceImpl extends ServiceImpl implements IEquipmentModifyLogService { + + private final AbstractUserService userService; + + @Override + public List listByEquipment(Long equipmentId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("equipment_id",equipmentId); + queryWrapper.orderByDesc("operate_time"); + List list = this.list(queryWrapper); + for (EquipmentModifyLog modifyLog : list) { + if(ObjectUtil.isNotEmpty(modifyLog.getOperateUserId())){ + modifyLog.setOperateUserName(userService.getById(modifyLog.getOperateUserId()).getName()); + } + } + return list; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java index aec2020..a5583b8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/plan/InspectionApprovalServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.model.plan.InspectionEquipmentRelation; import com.casic.missiles.model.plan.Plan; import com.casic.missiles.model.plan.PlanEquipmentRelation; +import com.casic.missiles.service.business.IBizBusinessOrderInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.plan.IInspectionApprovalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +50,8 @@ private IInspectionEquipmentRelationService relationService; @Autowired private IPlanEquipmentRelationService planEquipmentRelationService; + @Autowired + private IBizBusinessOrderInfoService orderInfoService; @Override @Transactional @@ -124,4 +127,13 @@ public void setBizNo(InspectionApproval obj) { obj.setBizNo(obj.getApprovalNo()); } + + public String checkApproval(InspectionApprovalForm approvalForm){ + List equipmentRelations = approvalForm.getEquipmentList(); + if(CollUtil.isNotEmpty(equipmentRelations)){ + List equipmentIds = equipmentRelations.stream().map(InspectionEquipmentRelation::getEquipmentId).collect(Collectors.toList()); + return orderInfoService.checkSamples(equipmentIds,null); + } + return null; + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java index 6dceac4..54bb635 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusApprovalServiceImpl.java @@ -15,17 +15,21 @@ import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.status.EquipmentStatusApproval; import com.casic.missiles.mapper.status.EquipmentStatusApprovalMapper; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.equipment.IEquipmentAttachmentService; import com.casic.missiles.service.equipment.IEquipmentInfoService; import com.casic.missiles.service.impl.CommonApprovalServiceImpl; import com.casic.missiles.service.status.IEquipmentStatusApprovalService; import com.casic.missiles.service.status.IEquipmentStatusLogService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -52,6 +56,7 @@ private final IBaseApprovalService baseApprovalService; private final AbstractPermissionContext permissionContext; private final IEquipmentStatusLogService statusLogService; + private final ISystemDeptService systemDeptService; @Override public Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm) { @@ -104,6 +109,13 @@ public void finishApproval(Long approvalId) { EquipmentStatusApproval approval = this.getById(approvalId); super.updateApprovalStatus(approval.getId(),ApprovalStatusEnum.PASSED); + if(ObjectUtil.isEmpty(approval.getApprovalTime()) || approval.getApprovalTime().before(new Date())){ + updateStatusAndSaveLog(approval); + } + } + + @Override + public void updateStatusAndSaveLog(EquipmentStatusApproval approval){ statusLogService.saveLog(approval); switch (approval.getApprovalType()) { case SEAL: @@ -191,9 +203,21 @@ public Page allPage(Page page, EquipmentStatusQueryForm queryForm) { QueryWrapper queryWrapper = commonQuery(queryForm); queryWrapper.eq("approval.approval_status",ApprovalStatusEnum.PASSED); - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - dataScope.setScopeName("info.dept_id"); - List list = this.baseMapper.listScopePage(dataScope, page, queryWrapper); +// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); +// dataScope.setScopeName("info.dept_id"); + + // 如果当前用户所在组织机构 的级别是受检单位,查本单位下所有连的;否则查当前用户所在连的 + List userDeptList = systemDeptService.getUserDeptList(null); + List userDeptIds = new ArrayList<>(); + if(ObjectUtil.isNotEmpty(userDeptList)) { + userDeptIds.add(permissionContext.getAuthService().getLoginUser().getDeptId()); + userDeptIds = userDeptList.stream().map(Dept::getId).collect(Collectors.toList()); + } + if(CollUtil.isEmpty(userDeptIds) || userDeptIds.size() <= 0){ + return page; + } + queryWrapper.in("info.dept_id",userDeptIds); + List list = this.baseMapper.listScopePage(null, page, queryWrapper); list.forEach(this::warpApprovalInfo); page.setRecords(list); return page; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java index de1f710..6282acc 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/status/EquipmentStatusLogServiceImpl.java @@ -26,14 +26,16 @@ @Override public void saveLog(EquipmentStatusApproval statusApproval) { - this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(),statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName()); + this.saveLog(statusApproval.getEquipmentId(),statusApproval.getApprovalType(), + statusApproval.getApprovalReason(),statusApproval.getCreateUserId(),statusApproval.getCreateUserName(), + statusApproval.getId()); } public void saveLog(Long equipmentId,String statusType,String reason){ - this.saveLog(equipmentId,statusType,reason,null,null); + this.saveLog(equipmentId,statusType,reason,null,null,null); } - public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName){ + public void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName,Long statusApprovalId){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("equipment_id",equipmentId); queryWrapper.orderByDesc("start_time"); @@ -50,6 +52,7 @@ newLog.setReason(reason); newLog.setCreateUserId(createUserId); newLog.setCreateUserName(createUserName); + newLog.setStatusApprovalId(statusApprovalId); this.save(newLog); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java index 1e453cb..0c8daec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/FlowDefDefServiceImpl.java @@ -225,7 +225,7 @@ .name(name) // .category() .deploy(); - log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); +// log.info("流程定义部署更新,flowable return deploy;{}", JSONObject.toJSONString(deploy)); if (Objects.isNull(deploy)) { return ReturnUtil.success("流程定义更新失败"); } @@ -741,8 +741,8 @@ // 设置多实例属性,多实例:会签情况下每个处理人对应一个实例 userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics); //多人审批时采用的审批方式 1依次会签 2并行会签 3或签 - //默认并行会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 - if ("1".equals(examineMode)) { + //默认依次会签,会签的实例存ACT_RU_IDENTITYLINK表,串行时表中会依次增加实例数据 + if ("1".equals(examineMode) || StringUtils.isEmpty(examineMode)) { multiInstanceLoopCharacteristics.setSequential(true); } else if ("3".equals(examineMode)) { //或签,即设置完成条件nrOfCompletedInstances/nrOfInstances > 0 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java index 8dac37e..6011184 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemDeptServiceImpl.java @@ -2,24 +2,25 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.mapper.system.SystemDeptMapper; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.system.ISystemDeptService; -import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.GetMapping; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; +import static com.casic.missiles.enums.system.DeptTypeEnum.METERED_DEPT; @Service @RequiredArgsConstructor @@ -27,6 +28,7 @@ private final AbstractDeptService deptService; private final AbstractPermissionContext permissionContext; + private final SystemDeptMapper systemDeptMapper; @Override public Dept getUserCompany() { @@ -47,6 +49,32 @@ return deptService.getById(deptId); } + @Override + public List getUserDeptList(Long companyId) { + AuthUser user = permissionContext.getAuthService().getLoginUser(); + Dept currentDept = deptService.getById(user.getDeptId()); + if(StrUtil.isBlank(currentDept.getPids()) || StrUtil.count(currentDept.getPids(),",") <= 1){ + // 顶级/受检单位 + if(ObjectUtil.isEmpty(companyId)){ + Dept userCompany = getUserCompany(); + if(userCompany.getPid() < 0){ + return deptService.list(null); + } + companyId = getUserCompany().getId(); + } + Long finalCompanyId = companyId; + return deptService.list(null).stream() + .filter(i->ObjectUtil.isNotEmpty(i.getPid()) && finalCompanyId.equals(i.getPid())) + .collect(Collectors.toList()); + }else if(StrUtil.count(currentDept.getPids(),",") == 2){ + // 连级 + return Collections.singletonList(currentDept); + }else if(StrUtil.count(currentDept.getPids(),",") == 3){ + // 分系统 + return Collections.singletonList(deptService.getById(currentDept.getPid())); + } + return null; + } @Override public List getAllCompanyList() { @@ -60,6 +88,21 @@ if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ secondDepts = secondDepts.stream().filter(i->dataScope.getDeptIds().contains(i.getId())).collect(Collectors.toList()); } + secondDepts = secondDepts.stream().filter(i->ObjectUtil.isNotEmpty(i.getVersion()) && METERED_DEPT.equals(i.getVersion())).collect(Collectors.toList()); return secondDepts; } + + @Override + public boolean isCompany(Long deptId) { + Dept dept = deptService.getById(deptId); + return dept.getPid() <= 0; + } + + @Override + public List treeByDept(String pid) { + List allDept = deptService.list(null); + allDept = allDept.stream().filter(i-> StrUtil.isNotBlank(i.getPids()) && i.getPids().contains(pid)).collect(Collectors.toList()); + return allDept; +// return systemDeptMapper.treeByDept(pid, deptType, tips); + } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java new file mode 100644 index 0000000..9251df5 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemLocationServiceImpl.java @@ -0,0 +1,145 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.mapper.system.SystemLocationMapper; +import com.casic.missiles.model.system.SystemLocation; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemLocationService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.service.system.ISystemPositionService; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemLocationServiceImpl extends ServiceImpl implements ISystemLocationService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + private final ISystemPositionService positionService; + + @Override + public void add(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setCreateUser(authService.getLoginUser().getId()); + systemLocation.setCreateTime(new Date()); + this.save(systemLocation); + } + + private void fillLocation(SystemLocation systemLocation) { + Long chooseDeptId = systemLocation.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemLocation.setSubSystemId(null); + systemLocation.setDeptId(chooseDeptId); + systemLocation.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemLocation.setSubSystemId(chooseDeptId); + systemLocation.setDeptId(chooseDept.getPid()); + systemLocation.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemLocation systemLocation) { + fillLocation(systemLocation); + systemLocation.setUpdateUser(authService.getLoginUser().getId()); + systemLocation.setUpdateTime(new Date()); + this.updateById(systemLocation); + } + + @Override + public void delete(SystemLocation systemLocation) { + Long positionId = systemLocation.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此安装位置与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = getQueryWrapper(searchId,positionId, installLocation); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId,Long positionId, String installLocation) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(ObjectUtil.isNotEmpty(positionId)){ + queryWrapper.eq("position_id",positionId); + } + if(StrUtil.isNotEmpty(installLocation)){ + queryWrapper.like("install_location", installLocation); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemLocation systemLocation){ + systemLocation.setCompanyName(deptService.getDeptName(systemLocation.getCompanyId())); + systemLocation.setDeptName(deptService.getDeptName(systemLocation.getDeptId())); + systemLocation.setSubSystemName(deptService.getDeptName(systemLocation.getSubSystemId())); + systemLocation.setPositionName(positionService.getNameById(systemLocation.getPositionId())); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java index f197fa6..f68b96e 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemNoticeServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.service.impl.system; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; @@ -16,7 +18,9 @@ import com.casic.missiles.mapper.system.SystemNoticeUserRelationMapper; import com.casic.missiles.model.system.SystemNotice; import com.casic.missiles.model.system.SystemNoticeUserRelation; +import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.service.board.IBoardMessageService; +import com.casic.missiles.service.system.ISystemDeptService; import com.casic.missiles.service.system.ISystemNoticeService; import com.casic.missiles.service.system.ISystemNoticeUserRelationService; import com.casic.missiles.utils.ConvertUtils; @@ -48,12 +52,22 @@ @Autowired private IBoardMessageService boardMessageService; + @Autowired + private ISystemDeptService systemDeptService; + @Autowired + private AbstractDeptService deptService; + @Override public Page listPage(Page page, NoticeListRequest request) { AuthUser user = ShiroKit.getUser(); if(!Objects.isNull(user)){ request.setUserId(user.getId()); } + Dept company = systemDeptService.getUserCompany(); + request.setUserCompanyName(company.getFullName()); + List allDeptList = deptService.list(null); + Dept top = allDeptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + request.setTopCompanyName(top.getFullName()); Page noticePage = noticeMapper.selectListPage(page, request); return noticePage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java new file mode 100644 index 0000000..3b2e9f4 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemPositionServiceImpl.java @@ -0,0 +1,149 @@ +package com.casic.missiles.service.impl.system; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.application.service.AbstractDeptService; +import com.casic.missiles.core.application.service.AbstractUserService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.equipment.EquipmentInfo; +import com.casic.missiles.model.equipment.EquipmentInfoApproval; +import com.casic.missiles.model.system.SystemPosition; +import com.casic.missiles.mapper.system.SystemPositionMapper; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.service.equipment.IEquipmentInfoApprovalService; +import com.casic.missiles.service.equipment.IEquipmentInfoService; +import com.casic.missiles.service.system.ISystemPositionService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +import static com.casic.missiles.core.datascope.ScopeEnums.ALL_TYPE; + +/** + *

+ * 受检系统-系统管理-岗位管理 服务实现类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +@Service +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) +public class SystemPositionServiceImpl extends ServiceImpl implements ISystemPositionService { + + private final AbstractDeptService deptService; + private final AbstractAuthService authService; + private final IEquipmentInfoService equipmentInfoService; + private final IEquipmentInfoApprovalService equipmentInfoApprovalService; + + @Override + public void add(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setCreateUser(authService.getLoginUser().getId()); + systemPosition.setCreateTime(new Date()); + this.save(systemPosition); + } + + private void fillPosition(SystemPosition systemPosition) { + Long chooseDeptId = systemPosition.getSubSystemId(); + Dept chooseDept = deptService.getById(chooseDeptId); + if(StrUtil.isBlank(chooseDept.getPids()) || StrUtil.count(chooseDept.getPids(),",") <= 1 || StrUtil.count(chooseDept.getPids(),",") > 3){ + throw new BusinessException(501,"请选择连队或分系统"); + } + if(StrUtil.count(chooseDept.getPids(),",") == 2){ + systemPosition.setSubSystemId(null); + systemPosition.setDeptId(chooseDeptId); + systemPosition.setCompanyId(chooseDept.getPid()); + } + if(StrUtil.count(chooseDept.getPids(),",") == 3){ + systemPosition.setSubSystemId(chooseDeptId); + systemPosition.setDeptId(chooseDept.getPid()); + systemPosition.setCompanyId(deptService.getById(chooseDept.getPid()).getPid()); + } + } + + @Override + public void update(SystemPosition systemPosition) { + fillPosition(systemPosition); + systemPosition.setUpdateUser(authService.getLoginUser().getId()); + systemPosition.setUpdateTime(new Date()); + this.updateById(systemPosition); + } + + @Override + public void delete(SystemPosition systemPosition) { + Long positionId = systemPosition.getId(); + QueryWrapper infoQueryWrapper = new QueryWrapper<>(); + infoQueryWrapper.eq("use_position",positionId); + infoQueryWrapper.eq("is_del","0"); + if(equipmentInfoService.count(infoQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备绑定,请先删除设备!"); + } + + QueryWrapper approvalQueryWrapper = new QueryWrapper<>(); + approvalQueryWrapper.eq("use_position",positionId); + if(equipmentInfoApprovalService.count(approvalQueryWrapper) > 0){ + throw new BusinessException(501,"此岗位与已存在设备审批记录绑定,请先删除审批记录!"); + } + this.removeById(positionId); + } + + @Override + public Page listPage(Page page, Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + page = this.page(page, queryWrapper); + page.getRecords().forEach(this::wrapper); + return page; + } + + @Override + public List list(Long searchId, String positionName) { + QueryWrapper queryWrapper = getQueryWrapper(searchId, positionName); + List list = this.list(queryWrapper); + list.forEach(this::wrapper); + return list; + } + + @NotNull + private QueryWrapper getQueryWrapper(Long searchId, String positionName) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + DataScope dataScope = authService.getLoginUserDataScope(); + if(!ALL_TYPE.equals(dataScope.getScopeEnums())){ + queryWrapper.in("sub_system_id",dataScope.getDeptIds()); + } + if(StrUtil.isNotEmpty(positionName)){ + queryWrapper.like("position_name", positionName); + } + if(ObjectUtil.isNotEmpty(searchId)){ + queryWrapper.and(i->i.eq("company_id", searchId) + .or().eq("dept_id", searchId) + .or().eq("sub_system_id", searchId)); + } + return queryWrapper; + } + + private void wrapper(SystemPosition systemPosition){ + systemPosition.setCompanyName(deptService.getDeptName(systemPosition.getCompanyId())); + systemPosition.setDeptName(deptService.getDeptName(systemPosition.getDeptId())); + systemPosition.setSubSystemName(deptService.getDeptName(systemPosition.getSubSystemId())); + } + + @Override + public String getNameById(Long positionId) { + SystemPosition position = this.getById(positionId); + if(ObjectUtil.isNotEmpty(position)){ + return position.getPositionName(); + } + return null; + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java index 5c841ed..dac2ff7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemSignServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.service.impl.system; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -80,9 +81,13 @@ private void wrapper(SystemSign systemSign){ User user = userMapper.selectById(systemSign.getSignUserId()); - systemSign.setSignDeptId(user.getDeptId()); - Dept dept = deptMapper.selectById(user.getDeptId()); - systemSign.setSignDeptName(dept.getFullName()); + if(ObjectUtil.isNotEmpty(user)){ + systemSign.setSignDeptId(user.getDeptId()); + Dept dept = deptMapper.selectById(user.getDeptId()); + if(ObjectUtil.isNotEmpty(dept)){ + systemSign.setSignDeptName(dept.getFullName()); + } + } } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java index b5a8a56..abbd428 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/plan/IInspectionApprovalService.java @@ -21,4 +21,6 @@ InspectionApprovalForm detail(Long inspectionId); + String checkApproval(InspectionApprovalForm approvalForm); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java index 791794d..a96dfec 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusApprovalService.java @@ -30,5 +30,5 @@ Long saveOrUpdateApproval(EquipmentStatusApproval approvalForm); EquipmentStatusApproval approvalInfoDetail(Long approvalId); - + void updateStatusAndSaveLog(EquipmentStatusApproval approval); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java index f4134d0..a87ead5 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/status/IEquipmentStatusLogService.java @@ -20,7 +20,5 @@ void saveLog(Long equipmentId,String statusType,String reason); - void saveLog(Long equipmentId,String statusType,String reason, Long createUserId, String createUserName); - List listByEquipment(Long equipmentId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java index a821d17..6db70cd 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemDeptService.java @@ -1,12 +1,44 @@ package com.casic.missiles.service.system; +import com.casic.missiles.core.node.ZTreeNode; import com.casic.missiles.modular.system.model.Dept; + import java.util.List; public interface ISystemDeptService { + /** + * 获取用户所在单位(受检单位级别) + * @return 所在单位(顶级用户返回顶级) + */ Dept getUserCompany(); + /** + * 获取用户所属部门(连级) + * @param companyId 单位id + * @return 受检单位用户返回单位下的所有连,连级/分系统级 返回所在连 + */ + List getUserDeptList(Long companyId); + + /** + * 返回所有受检单位 + * @return 受检单位列表 + */ List getAllCompanyList(); + + /** + * 判断单位是否是受检单位 + * @param deptId 单位id + * @return deptId是受检单位,返回true + */ + boolean isCompany(Long deptId); + + /** + * 根据pid返回下级部门 + * @param pid 父级单位id + * @return 所有下级部门 + */ + List treeByDept(String pid); + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemLocationService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemLocationService.java new file mode 100644 index 0000000..6945f8c --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemLocationService.java @@ -0,0 +1,30 @@ +package com.casic.missiles.service.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.model.system.SystemLocation; +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.model.system.SystemLocation; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-安装位置管理 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface ISystemLocationService extends IService { + + void add(SystemLocation systemLocation); + + void update(SystemLocation systemLocation); + + void delete(SystemLocation systemLocation); + + Page listPage(Page page, Long searchId,Long positionId, String installLocation); + + List list(Long searchId,Long positionId, String installLocation); + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemPositionService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemPositionService.java new file mode 100644 index 0000000..2bcd0ef --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/system/ISystemPositionService.java @@ -0,0 +1,33 @@ +package com.casic.missiles.service.system; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.model.system.SystemPosition; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 受检系统-系统管理-岗位管理 服务类 + *

+ * + * @author zhangyingjie + * @since 2023-11-15 + */ +public interface ISystemPositionService extends IService { + + void add(SystemPosition systemPosition); + + void update(SystemPosition systemPosition); + + void delete(SystemPosition systemPosition); + + Page listPage(Page page, Long searchId, String positionName); + + List list(Long searchId, String positionName); + + String getNameById(Long positionId); + + +} diff --git a/pom.xml b/pom.xml index 543eb92..e6e45e1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.casic casic-metering-eqpt-xichang - 1.1.1.1 + 1.2.0.7 casic-metering-eqpt-xichang pom